0

2 つのコレクション ビューを持つタブバー アプリを作成しています。コレクション ビューで 2 つのタブ バーが正常に機能していますが、どちらも同じ画像フォルダーからデータを受信して​​います - サムとフル。そのため、画像は現在両方のタブで同じです。

異なるフォルダから異なる画像を表示する最善の方法を見つけたいと思っていたので、それらは同じではありませんか?

さらに情報が必要な場合はお知らせください。

NSString *kDetailedViewControllerID = @"DetailView";   
NSString *kCellID = @"cellID";                          




@implementation ViewController

- (NSInteger)collectionView:(UICollectionView *)view numberOfItemsInSection:(NSInteger)section;
{
    return 29;
}

- (UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath;
{

    Cell *cell = [cv dequeueReusableCellWithReuseIdentifier:kCellID forIndexPath:indexPath];



    NSString *imageToLoad = [NSString stringWithFormat:@"%d.JPG", indexPath.row];
    cell.image.image = [UIImage imageNamed:imageToLoad];

    return cell;
}



- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"showDetail"])
    {
        NSIndexPath *selectedIndexPath = [[self.collectionView indexPathsForSelectedItems] objectAtIndex:0];

        // load the image, to prevent it from being cached we use 'initWithContentsOfFile'
        NSString *imageNameToLoad = [NSString stringWithFormat:@"%d_full", selectedIndexPath.row];
        NSString *pathToImage = [[NSBundle mainBundle] pathForResource:imageNameToLoad ofType:@"JPG"];
        UIImage *image = [[UIImage alloc] initWithContentsOfFile:pathToImage];

        DetailViewController *detailViewController = [segue destinationViewController];
        detailViewController.image = image;
    }
}

@end
4

1 に答える 1

1

imageWithNameまたはを使用する場合[[NSBundle mainBundle] pathForResource:imageNameToLoad ofType:@"JPG"]、異なるフォルダではなく、異なるファイル名を持つ異なるサイズの画像へのアクセスを制御することが期待されます。別のフォルダを使用したい場合は、通常NSBundle、ロードには使用しません。

あなたのコメントから、必ずしも別のクラスや複製を使用する必要さえありません。再利用について考えてみましょう。コントローラーのロジックは同じでも、画像のサイズ/場所が異なる場合は、クラスにいくつかのプロパティを追加してこれらの詳細を設定し、その 1 つのクラスをインスタンス化して、両方の状況で動作するように構成できます。

于 2013-08-23T11:17:50.783 に答える