我有一个带有UICollectionView的ViewController,我想在其中显示用户朋友列表中玩家的前两个字母,如下所示:
func collectionView(collectionView: UICollectionView,
cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
contactListCollection.registerClass(PlayerCell.self, forCellWithReuseIdentifier: "PlayerCell")
let cell = collectionView.dequeueReusableCellWithReuseIdentifier("PlayerCell", forIndexPath: indexPath) as! PlayerCell
let contacts = contactList.getContactList() //Array of strings
for(var i = 0; i < contacts.count; i++){
var str = contacts[i]
// First two letters
let firstTwo = Range(start: str.startIndex,
end: str.startIndex.advancedBy(2))
str = str.substringWithRange(firstTwo)
cell.setButtonTitle(str);
}
return cell;
}
func collectionView(collectionView: UICollectionView,
numberOfItemsInSection section: Int) -> Int {
return contactList.getContactList().count;
}
我的PlayerCell类如下:
class PlayerCell : UICollectionViewCell {
@IBOutlet var button: UIButton?
func setButtonTitle(text: String){
button!.setTitle(text, forState: .Normal)
}
}
运行代码时,它给出:
致命错误:解开Optional值时意外发现nil
我发现PlayerCell中的按钮为nil
我在情节提要中的单元格内添加了按钮,并将这些按钮与参考插座相连
我在这里想念什么吗?
在Swift 2.0中使用xCode 7
最佳答案
作为编译过程的一部分,Xcode将情节提要转换为XIB文件的集合。这些XIB文件之一包含您的单元格设计。
当您的应用加载在情节提要中设计的集合视图控制器时,该控制器将为该单元注册该单元的XIB文件。
您正在通过调用registerClass(_:forCellWithReuseIdentifier:)
,切断“ PlayerCell”重用标识符和包含PlayerCell
设计的XIB之间的连接,来覆盖该注册。
摆脱这一行:
contactListCollection.registerClass(PlayerCell.self, forCellWithReuseIdentifier: "PlayerCell")
另外,请确保在情节提要中已将单元的重用标识符设置为“ PlayerCell”。