如何使用Swift在UICollectionViewCell中设置UIButton的标题

时间:2015-11-03 14:33:01

标签: ios swift uibutton uicollectionview uicollectionviewcell

我有一个带有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一起使用

2 个答案:

答案 0 :(得分:1)

作为编译过程的一部分,Xcode将故事板转换为XIB文件的集合。其中一个XIB文件包含您的单元格设计。

当您的应用加载您在故事板中设计的集合视图控制器时,控制器会负责为单元格注册单元格的XIB文件。

您通过调用registerClass(_:forCellWithReuseIdentifier:)覆盖该注册,切断“PlayerCell”重用标识符与包含PlayerCell设计的XIB之间的连接。

摆脱这条线:

contactListCollection.registerClass(PlayerCell.self, forCellWithReuseIdentifier: "PlayerCell")

另外,请确保在故事板中将单元格的重用标识符设置为“PlayerCell”。

答案 1 :(得分:0)

尝试: 1.我会检查按钮上是否没有旧的参考插座。右键单击界面构建器中的按钮,确保只连接了相应的插座。​​

  1. 确保在故事板中将可重复使用的单元格的类设置为PlayerCell

  2. 确保您已将Ctrl +从集合视图拖动到其所在的视图控制器,并将委托和数据源设置为自身。

  3. 希望其中一个可以帮到你。