UICollectionView按钮

时间:2016-12-08 20:46:55

标签: ios swift uicollectionview

我试图用按钮创建UICollectionView。我可以设置按钮标题,但目标动作不起作用。以下是我的代码:

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "TVButtonCell", for: indexPath) as! TVButtonCell
    cell.channelButton.setTitle(channelKeys[indexPath.row], for: .normal)
    cell.channelButton.addTarget(self, action: #selector(FirstViewController.pressed(_:)), for: .primaryActionTriggered)
    return cell
}

    func pressed(_ sender: AnyObject) {
    print("Button pressed")
}

有人知道我做错了什么吗?

2 个答案:

答案 0 :(得分:0)

你应该使用委托来调用viewcontrollers上的方法。

protocol TVButtonCellDelegate: class {
    func buttonClicked()
}

然后在TVButtonCell上创建弱变量以传递委托。

weak var delegate: TVButtonCellDelegate?

以及tvbuttoncell上的IBAction调用委托内的方法

@IBAction func tvButtonClicked(sender: UIBUtton) {
   delegate?. buttonClicked()
}

然后你只需在firstviewcontroller上应用委托

extension FirstViewController: TVButtonCellDelegate {
   func buttonClicked() {
       print("button clicked")
   }
}

然后在创建一个

时将firstcontroller分配给单元格
 func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "TVButtonCell", for: indexPath) as! TVButtonCell
    cell.channelButton.setTitle(channelKeys[indexPath.row], for: .normal)
    cell.delegate = self
    return cell

答案 1 :(得分:0)

该死, 需要添加以下功能:

    func collectionView(_ collectionView: UICollectionView, canFocusItemAt indexPath: IndexPath) -> Bool {
    return false
}