我有一个UICollectionViewController(HomeViewController
),每个单元格都包含一个集合视图,在每个集合视图的单元格中都有一个按钮(moreButton
)。我想为每个按钮添加相同的目标(handleMore
),但目标存在于UICollectionViewController中。
这是我尝试在包含collectionView的单元类中实现此行为的方法:
cell.moreButton.addTarget(self, action: #selector(HomeViewController.handleMore), for: UIControlEvents.touchUpInside)
此外,还有更好的方法吗?该按钮可能会显示一个视图控制器。
答案 0 :(得分:4)
我认为从cellForRowAtIndexPath:
制作目标并不是一个好主意。您应该从自定义Cell Class实现委托,例如:
Protocol CustomCellDelegate{
func didButtonPressed()
}
你需要实例化一个名为delegate的var来实现你的单元格的按钮目标:
class CustomCell: UITableViewCell{
/...../
var delegate: CustomCellDelegate? = nil
override func AwakeFromNib(){
super.awakeFromNib()
self.button.addTarget(self, action: #selector(handleMore), for: .touchUpInside)
}
func handleMore(){
if(self.delegate != nil){
self.delegate.didButtonPressed()
}
}
}
这是使用ViewController制作内容的示例,因此您首先要将单元格的委托设置为self(cell.delegate = self
),其次必须在ViewController上实现CustomCellDelegate。否则,如果您只在自己的单元格中更改某些内容,则可以使用自定义单元格类中的添加目标。