我有一个UICollectionViewController,它委托UICollectionViewDataSource和UICollectionViewDelegate。我的集合视图显示了包含多行数据的2个部分,并且工作正常。
我创建了一个Section Header(在IB Attributes Inspector - > Accessories中),然后使用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 UILabel hiScoreHead 属性与IB中的插座连接时,我的问题出现了。当我这样做时,程序崩溃:
Interface Builder文件中的未知类SWOHighScoreHeader。
** *由于未捕获的异常'NSUnknownKeyException'而终止应用程序,原因:'[setValue:forUndefinedKey:]:此类不是密钥值编码兼容的密钥submitButton。'
我尝试删除插座连接并重新连接,但仍然没有。我出错的任何想法?
答案 0 :(得分:0)
将以下属性添加到SWOHighScoreHeader:
@property (weak) IBOutlet UIButton* submitButton;
或者尝试找出故事板中哪个对象期望submitButton实际存在。
答案 1 :(得分:0)
IBoutlet必须始终是弱属性,否则其容器将不会被释放。
答案 2 :(得分:0)
我通过使用Tags而不是IBOutlets来解决这个问题,即
UILabel *hiScoreHeader = (UILabel *)[highScoreHeaderView viewWithTag:101];
hiScoreHeader.text = @"Header Text";
我不确定为什么IBOutlets不起作用,但至少我有一个解决方案。