我有一个UICollectionViewController,它委托UICollectionViewDataSource和UICollectionViewDelegate。我的集合视图显示了包含多行数据的2个部分,工作正常。
我创建了一个Section Header(在IB属性检查器->附件中),然后用SWOHighScoreHeader类将UICollectionReusableView子类化:
@interface SWOHighScoreHeader : UICollectionReusableView
@property (strong, nonatomic) IBOutlet UILabel *hiScoreHead;
@end
我将这个类(SWOHighScoreHeader)设置为IB.中UICollectionReusableView的自定义类
在UICollectionViewController中,我使用以下方法:
-(UICollectionReusableView*)collectionView:(UICollectionView*)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath{
SWOHighScoreHeader *highScoreHeaderView = nil;
if ([kind isEqual:UICollectionElementKindSectionHeader]) {
highScoreHeaderView = [collectionView dequeueReusableSupplementaryViewOfKind:kind
withReuseIdentifier:@"highScoreTableHead"
forIndexPath:indexPath];
}
return highScoreHeaderView;
}
标识符highScoreTableHead在IB中设置为UICollectionReusableView集合可重用视图标识符。
在这个阶段,虽然使用了默认的标签文本,但是节标题显示正确。
当我将IBOutlet UILabelhiScoreHead属性与IB中的出口连接时,我的问题就出现了。当我这样做时,程序会崩溃:
接口生成器文件中的未知类SWOHighScoreHeader
***由于未捕获的异常"NSUnknownKeyException"而终止应用程序,原因:"[setValue:forUndefinedKey:]:此类不符合键submitButton的键值编码。"
我试过删除插座连接并重新连接,但仍然一无所获。你知道我哪里错了吗?
将以下属性添加到SWOHighScoreHeader:
@property (weak) IBOutlet UIButton* submitButton;
或者试着找出故事板中哪个对象期望submitButton实际存在。
IBoutlet必须始终是弱属性,否则其容器将不会被释放。
我通过使用标签而不是IBOutlets即解决了这个问题
UILabel *hiScoreHeader = (UILabel *)[highScoreHeaderView viewWithTag:101];
hiScoreHeader.text = @"Header Text";
我不知道为什么IBOutlets不起作用,但至少我有一个解决方案。