我试图用按钮创建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")
}
有人知道我做错了什么吗?
答案 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
}