0

私はコレクション ビューが初めてで、これがコレクション ビューを作成する最善の方法であるかどうかを知りたいです。また、ページングが有効になっている詳細ビューにセグエするためにそこからどこに行くべきかについてもアドバイスをお願いします。

#import "MarbleCollectionViewController.h"
#import "DetailViewController.h"

@interface MarbleCollectionViewController () {
   NSArray *marbleImages;
}

@end

@implementation MarbleCollectionViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
  self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];

    marbleImages = [NSArray arrayWithObjects:@"arabescato.jpg",
                    @"bianco-carrara.jpg",
                    @"botticino-classico2.jpg",
                    @"Calacatta_Oro.jpg",
                    @"crema-marfil-3.jpg",
                    @"crema-valencia.jpg",
                    @"emperador-dark.jpg",
                    @"jura-beige.jpg",
                    @"nero-marquina.jpg",
                    @"perlato-olympo.jpg",
                    @"rojo-alicante_marbleGRP1.jpg", nil];
}

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
    return marbleImages.count;
}

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
    static NSString *identifier = @"Cell";

    UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath];

    UIImageView *marbleImageView = (UIImageView *)[cell viewWithTag:100];
    marbleImageView.image = [UIImage imageNamed:[marbleImages objectAtIndex:indexPath.row]];

    return cell;
}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

    if ([segue.identifier isEqualToString:@"detailView"]) {
        DetailViewController *destViewController = segue.destinationViewController;
        NSIndexPath *indexPath = [self.collectionView ];
        destViewController.recipeImageName = [marbleImages[indexPath.section] objectAtIndex:indexPath.row];
        [self.collectionView deselectItemAtIndexPath:indexPath animated:NO];
    }
}

- (void)didReceiveMemoryWarning

{
   [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.
}

@end

これは私の詳細ビューコードです:

#import "DetailViewController.h"

@interface DetailViewController ()

@end

@implementation DetailViewController

@synthesize recipeImageView;
@synthesize recipeImageName;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.recipeImageView.image = [UIImage imageNamed:self.recipeImageName];
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

これを実装する方法がわからないため、詳細ビューの別のコレクションビューまたはページングが有効になっているスクロールビューですか? トップナビゲーションバーにもタイトルを付けたいですか?

前もって感謝します!

4

1 に答える 1

1

あなたのコードにコーディングの間違いを見つけることができます。エラーの原因になります。 marbleImages文字列オブジェクトのアリーです

marbleImages = [NSArray arrayWithObjects:@"arabescato.jpg",...];

しかし、prepareForSegue:あなたは次のようにやっています

destViewController.recipeImageName = [marbleImages[indexPath.section] objectAtIndex:indexPath.row]; 

このコードは、配列オブジェクトの配列を想定しています。上記のコードは次のように変換できます。

 NSString *obj = [marbleImages[indexPath.section]] // It will return string only since you are storing string
[obj objectAtIndex:indexPath.row]// This will cause error since NSString does not have a method objectAtIndex:  

セクションが 1 つしかないことを願っています (noOfSections メソッドが見つかりませんでした)。だから好きです

    destViewController.recipeImageName = [marbleImages objectAtIndex:indexPath.row];

詳細ビューの提案

iPhoneのネイティブ写真アプリを真似しようとしていると思います。同じような感覚を得るには、ページングを有効にしてスクロールビューを使用する必要があります。コレクション ビューでも可能です。簡単な実装の 1 つは、コレクション ビューを使用することです。CollectionViewFlowLayout のプロパティを調整すると、それを実現できます。

于 2013-05-17T11:21:05.207 に答える