UICollectionViewCells不出现在UICollectionView中

时间:2013-04-18 01:12:47

标签: ios uicollectionview uicollectionviewcell

正如标题所示,我有一个UICollectionView通过IB连接到UIViewController。我有一个名为UICollectionView的{​​{1}}子类。在viewcontroller imageCell方法中,我注册了这样的类:

viewDidLoad

然后我在CGRect collectionViewRect = CGRectMake(384, 60, 728, 924); UICollectionViewFlowLayout *flow = [[UICollectionViewFlowLayout alloc] init]; imageCollectionView = [[UICollectionView alloc] initWithFrame:collectionViewRect collectionViewLayout:flow]; [imageCollectionView registerClass:[imageCell class] forCellWithReuseIdentifier:@"Cell"]; imageCollectionView.delegate = self; imageCollectionView.dataSource = self; 中调用了一个名为getPhotos的方法(出于用户界面原因),该方法从服务中获取照片,然后在viewDidAppear内调用[imagCcollectionView reloadData];

然后在getPhotos我执行以下操作:

cellForItemAtIndexPath

我知道我在这里没有做错任何错误,因为正在调用该方法且imageCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"Cell" forIndexPath:indexPath]; GRKAlbum *album = [albums objectAtIndex:indexPath.item]; cell.titleLabel.text = album.name; return cell; 不是cellnil也不是。

因此,当我运行所有这些代码时,会出现album,但其中没有任何内容。我只能看到UICollectionView的背景颜色。任何帮助都将非常感激。

注意:我在创建collectionView类时没有为我创建一个XIB,而且我正在使用Storyboard。

8 个答案:

答案 0 :(得分:79)

有一些方法可以调试这种情况。

  1. 注册 UICollectionViewCell 类而不是 customCell ,并在cellForItem...

  2. 中设置单元格的背景颜色
  3. 如果单元格出现在第一步中,请尝试使用您自己的单元格类并设置其背景

  4. 你在使用故事板吗?然后..

    您不必为集合视图注册任何单元格。您可以使用原型单元格,只需为单元格提供正确的ID。您可以在原型单元格中设计所有内容。在所有情况下可能不需要自定义类。

答案 1 :(得分:42)

如果您在故事板中创建了单元格,那么只需删除寄存器类语句即可。如果您在故事板中创建单元格,则不需要注册任何内容(对于集合视图或表视图)(事实上,如果您这样做,它会搞砸了)。您唯一需要做的就是确保在IB中设置标识符。

答案 2 :(得分:16)

我修复了同样的问题,用下面的行替换了传统的registercell

[self.collection registerNib:[UINib nibWithNibName:@"nibname" bundle:nil] forCellWithReuseIdentifier:identifier];

答案 3 :(得分:0)

您在代码中实例化了一个新的集合视图,但没有将视图添加到屏幕上。你说你已经在使用故事板了,我的猜测是你可以看到你的故事板中的集合视图,它可能与数据源或委托无关?或者你没有在正确的集合视图上调用reload。

在故事板中配置您的集合视图(并为代码中必须完成的任何操作设置一个插座)或在代码中完全设置它。目前我认为你有两个集合视图。

答案 4 :(得分:0)

我使用Xcode 6.2故事板制作了它。希望它有所帮助

#import <UIKit/UIKit.h>

@interface InfoSecurity : UIViewController
@property (strong, nonatomic) IBOutlet UICollectionView *tabsCV;

@end

.m
**************

#import "InfoSecurity.h"
#import "TabsCell.h"

@interface InfoSecurity ()<UICollectionViewDataSource,UICollectionViewDelegateFlowLayout>

@end

@implementation InfoSecurity

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.

    [self.tabsCV registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"TabsCell"];

}

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
    return 03;
}
- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView
{
    return 01;
}
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
    return CGSizeMake(90, 50);
}
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *reuseIdentifier = @"tabscellID";


    TabsCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:reuseIdentifier forIndexPath:indexPath];

    cell.TabTitleLabel.text= @"OPTIONS";

    return cell;

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

答案 5 :(得分:0)

当我意识到我的收藏视图单元格被我的导航栏覆盖时,我觉得自己像个假人。 Sooo,请确保您的导航栏(如果有的话)没有覆盖您正在测试的集合视图单元格。

答案 6 :(得分:0)

有时集合视图单元格是黑色的(背景颜色相同,不可见,隐藏为否),重新加载可见单元格是一种解决方法。

答案 7 :(得分:0)

错误是您注册Nib / Xib文件(使用Swift 5)的方式:

使用此注册方法:

myCollectionView.register(UINib(nibName: "myCustomCell", bundle: nil), forCellWithReuseIdentifier: "myCustomCell")

代替此:

myCollectionView.register(myCustomCell.self, forCellWithReuseIdentifier: "myCustomCell")