我正在尝试将UICollectionView显示在一个模态显示的视图控制器中。该应用适用于iPad iOS 7。
我已经创建了UIViewController的子类(带有一个nib)并像这样添加它:
MyViewController *controller = [[MyViewController alloc] init];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:controller];
navController.modalPresentationStyle = UIModalPresentationFullScreen;
navController.navigationBar.barStyle = UIBarStyleBlackTranslucent;
[self presentViewController:navController animated:YES completion:nil];
这个视图控制器是我的UICollectionView的委托和dataSource,所以我在标题中添加了UICollectionViewDataSource和UICollectionViewDelegate。
我已将UICollectionView放入笔尖并为MyViewController添加了一个插座:
@property (strong, nonatomic) IBOutlet MyCollectionView *collectionViewController;
我在MyViewController中的viewDidLoad中添加了这个:
self.collectionViewController.dataSource = self;
self.collectionViewController.delegate = self;
我还在MyViewController中添加了以下内容:
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
NSLog(@"Items in section: %d", itemsArray.count); // returns correct amount
return itemsArray.count;
}
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"cellForItemAtIndexPath %@", indexPath); // returns as expected
static NSString *identifier = @"MyCell";
[self.collectionViewController registerClass:[MyCollectionCell class] forCellWithReuseIdentifier:identifier];
MyCollectionCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath];
UIImageView *myImageView = (UIImageView *)[cell viewWithTag:100];
myImageView.image = [UIImage imageNamed:[itemsArray objectAtIndex:indexPath.row]];
return cell;
}
我还设置了一个UICollectionViewCell的子类,其标识符设置为MyCell,并添加了一个标签为100的UIImageView。
每当我调出这个视图控制器时,我都会按预期获得导航栏,但是我添加到我的笔尖的UICollection视图无处可见。我所看到的只是集合视图所在的黑色。如果我将MyCollectionView的背景颜色从默认更改为白色,我会看到白色应该是集合视图。它似乎正在调出MyCollectionView,但没有显示任何单元格。
答案 0 :(得分:25)
另一个兴趣点是,如果在nib或storyboard中设置单元格的标识符,请不要在集合视图控制器中注册nib / class。做其中一个,但不是两个。
答案 1 :(得分:20)
如果您在xib文件中链接了collectionView及其自己的dataSource和delegate,则无需在代码中设置它。
接下来,您需要注册您的UICollectionViewCell:
- (void)viewDidLoad
{
[super viewDidLoad];
// Register Nib
[self.collectionView registerNib:[UINib nibWithNibName:CollectionViewCell_XIB bundle:[NSBundle mainBundle]] forCellWithReuseIdentifier:CollectionViewCell_ID];
}
CollectionViewCell_XIB
是您的单元格xib的名称
CollectionViewCell_ID
是您的单元格的ID
您需要像这样实施cellForItemAtIndexPath
:
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
CollectionViewCell *cell = (CollectionViewCell *)[self.collectionView dequeueReusableCellWithReuseIdentifier:CollectionViewCell_ID forIndexPath:indexPath];
// Configure cell with data
UIImageView *myImageView = (UIImageView *)[cell viewWithTag:100];
myImageView.image = [UIImage imageNamed:[itemsArray objectAtIndex:indexPath.row]];
// Return the cell
return cell;
}