正如标题所示,我有一个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;
不是cell
,nil
也不是。
因此,当我运行所有这些代码时,会出现album
,但其中没有任何内容。我只能看到UICollectionView
的背景颜色。任何帮助都将非常感激。
注意:我在创建collectionView
类时没有为我创建一个XIB,而且我正在使用Storyboard。
答案 0 :(得分:79)
有一些方法可以调试这种情况。
注册 UICollectionViewCell 类而不是 customCell ,并在cellForItem...
如果单元格出现在第一步中,请尝试使用您自己的单元格类并设置其背景
你在使用故事板吗?然后..
您不必为集合视图注册任何单元格。您可以使用原型单元格,只需为单元格提供正确的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)
答案 6 :(得分:0)
有时集合视图单元格是黑色的(背景颜色相同,不可见,隐藏为否),重新加载可见单元格是一种解决方法。
答案 7 :(得分:0)
错误是您注册Nib / Xib文件(使用Swift 5)的方式:
使用此注册方法:
myCollectionView.register(UINib(nibName: "myCustomCell", bundle: nil), forCellWithReuseIdentifier: "myCustomCell")
代替此:
myCollectionView.register(myCustomCell.self, forCellWithReuseIdentifier: "myCustomCell")