UICollectionReusableView 部分 Header 由于 IBOutlet 连接而崩溃
UICollectionReusableView Section Header crashes because of IBOutlet connection
我有一个 UICollectionViewController 委托 UICollectionViewDataSource 和 UICollectionViewDelegate。我的 collection 视图显示 2 个包含多行数据的部分并且工作正常。
我创建了一个部分 Header(在 IB 属性检查器 -> 附件中),然后将 classes UICollectionReusableView 与 SWOHighScoreHeader class:
@interface SWOHighScoreHeader : UICollectionReusableView
@property (strong, nonatomic) IBOutlet UILabel *hiScoreHead;
@end
我将此 class (SWOHighScoreHeader) 设置为 IB 中 UICollectionReusableView 的自定义 Class。
在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 Collection 可重用视图标识符。
在此阶段,headers 部分可以正确显示,尽管使用默认标签文本。
当我将 IBOutlet UILabel hiScoreHead 属性 与 IB 中的插座连接时,我的问题就出现了。当我这样做时,程序崩溃:
未知 class SWOHighScoreHeader 在 Interface Builder 文件中。
** * 由于未捕获的异常 'NSUnknownKeyException' 而终止应用程序,原因:'[ setValue:forUndefinedKey:]: 这个 class 不是键值 coding-compliant 键 submitButton。'
我试过删除插座连接并重新连接,但仍然没有。我哪里出错了?
将以下内容属性 添加到 SWOHighScoreHeader:
@property (weak) IBOutlet UIButton* submitButton;
或者尝试找出情节提要中的哪个对象期望 submitButton 实际存在。
IBoutlet 必须始终是弱属性,否则它的容器将不会被释放。
我通过使用标签而不是 IBOutlets 解决了这个问题,即
UILabel *hiScoreHeader = (UILabel *)[highScoreHeaderView viewWithTag:101];
hiScoreHeader.text = @"Header Text";
我不确定为什么 IBOutlets 不起作用,但至少我有一个解决方案。
我有一个 UICollectionViewController 委托 UICollectionViewDataSource 和 UICollectionViewDelegate。我的 collection 视图显示 2 个包含多行数据的部分并且工作正常。
我创建了一个部分 Header(在 IB 属性检查器 -> 附件中),然后将 classes UICollectionReusableView 与 SWOHighScoreHeader class:
@interface SWOHighScoreHeader : UICollectionReusableView
@property (strong, nonatomic) IBOutlet UILabel *hiScoreHead;
@end
我将此 class (SWOHighScoreHeader) 设置为 IB 中 UICollectionReusableView 的自定义 Class。
在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 Collection 可重用视图标识符。
在此阶段,headers 部分可以正确显示,尽管使用默认标签文本。
当我将 IBOutlet UILabel hiScoreHead 属性 与 IB 中的插座连接时,我的问题就出现了。当我这样做时,程序崩溃:
未知 class SWOHighScoreHeader 在 Interface Builder 文件中。
** * 由于未捕获的异常 'NSUnknownKeyException' 而终止应用程序,原因:'[ setValue:forUndefinedKey:]: 这个 class 不是键值 coding-compliant 键 submitButton。'
我试过删除插座连接并重新连接,但仍然没有。我哪里出错了?
将以下内容属性 添加到 SWOHighScoreHeader:
@property (weak) IBOutlet UIButton* submitButton;
或者尝试找出情节提要中的哪个对象期望 submitButton 实际存在。
IBoutlet 必须始终是弱属性,否则它的容器将不会被释放。
我通过使用标签而不是 IBOutlets 解决了这个问题,即
UILabel *hiScoreHeader = (UILabel *)[highScoreHeaderView viewWithTag:101];
hiScoreHeader.text = @"Header Text";
我不确定为什么 IBOutlets 不起作用,但至少我有一个解决方案。