2017-07-17 9 views
0

それぞれコレクションビューを含むセルを持つUICollectionViewController(HomeViewController)があり、各コレクションビューのセルにボタン(moreButton)があります。私は各ボタンに同じターゲット(handleMore)を追加したいが、ターゲットはUICollectionViewControllerに存在する。外部クラスからUIButtonにターゲットを追加する

これは私がcollectionViewを含むセルクラスでこの動作を実装しようとした方法です:

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

また、これを行うには良い方法はありますか?このボタンは、おそらくView Controllerを表示します。

答えて

4

cellForRowAtIndexPath:からターゲットを作るのは良い考えではないと思います。あなたは、たとえば、カスタムセルクラスからデリゲートを実装する必要があります。

Protocol CustomCellDelegate{ 
    func didButtonPressed() 
} 

そして、あなたはあなたの携帯のボタンの目標実現のためのデリゲートと呼ばれる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の何か、あなたは最初にあなたのViewControllerにCustomCellDelegateを実装する必要がありますセル(cell.delegate = self)にセルのデリゲートを最初に設定します。それ以外の場合は、このセル内でのみ何かを変更する場合は、カスタムセルクラスの追加ターゲットを使用できます。

関連する問題