我有一个带有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)
}
}
运行代码时: 致命错误:在解包可选值时意外发现nil
我发现我的PlayerCell中的按钮是nil
我在故事板中添加了单元格内的按钮,并将其与引用插座相连接
我在这里错过了什么吗?
将xCode 7与Swift 2.0一起使用
答案 0 :(得分:1)
作为编译过程的一部分,Xcode将故事板转换为XIB文件的集合。其中一个XIB文件包含您的单元格设计。
当您的应用加载您在故事板中设计的集合视图控制器时,控制器会负责为单元格注册单元格的XIB文件。
您通过调用registerClass(_:forCellWithReuseIdentifier:)
覆盖该注册,切断“PlayerCell”重用标识符与包含PlayerCell
设计的XIB之间的连接。
摆脱这条线:
contactListCollection.registerClass(PlayerCell.self, forCellWithReuseIdentifier: "PlayerCell")
另外,请确保在故事板中将单元格的重用标识符设置为“PlayerCell”。
答案 1 :(得分:0)
尝试: 1.我会检查按钮上是否没有旧的参考插座。右键单击界面构建器中的按钮,确保只连接了相应的插座。
确保在故事板中将可重复使用的单元格的类设置为PlayerCell
确保您已将Ctrl +从集合视图拖动到其所在的视图控制器,并将委托和数据源设置为自身。
希望其中一个可以帮到你。