从外部类向UIButton添加目标

时间:2017-07-17 19:40:20

标签: ios swift

我有一个UICollectionViewController(HomeViewController),每个单元格都包含一个集合视图,在每个集合视图的单元格中都有一个按钮(moreButton)。我想为每个按钮添加相同的目标(handleMore),但目标存在于UICollectionViewController中。

这是我尝试在包含collectionView的单元类中实现此行为的方法:

cell.moreButton.addTarget(self, action: #selector(HomeViewController.handleMore), for: UIControlEvents.touchUpInside)

此外,还有更好的方法吗?该按钮可能会显示一个视图控制器。

1 个答案:

答案 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。否则,如果您只在自己的单元格中更改某些内容,则可以使用自定义单元格类中的添加目标。