UICollectionReusableView节标头由于IBOutlet连接而崩溃



我有一个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不起作用,但至少我有一个解决方案。

相关内容

  • 没有找到相关文章

最新更新