Swift カスタムテーブルセル上のアクションをデリゲート使って親クラスから実行してみる。

カスタムテーブルセルのアクセションをその親のビュークラスから操作する必要がでてくる事があります。 その時にデリゲート使って、他のクラスに処理を委任する方法を書いてみました。

キーとなるのはプロトコル、まずプロトコルでどのようなファンクションが用意されるのかを定義します。

protocol TouchCellDelegate {
    func getNo(id: Int) -> Void
}

カスタムセルクラスの中で、特定のタイミングでプロトコルで定義した処理を委任するコードを用意します。

func handleTap(gestureRecognizer: UIGestureRecognizer) {
        self.delegate?.getNo(self.id!)
    }

委任先のクラスでは、プロトコルTouchCellDelegateを委任する事を宣言します。

class MainView: UIViewController, UITableViewDelegate, UITableViewDataSource,TouchCellDelegate {

カスタムセルクラスの生成時に、カスタムセルが持つデリゲートの委任先が自身である事を定義します。これによって、カスタムセルクラスから、他のクラスへの委任設定が完了します。

cell.delegate = self

今回は、MainViewクラスがデリゲートの委任先としましたが、 デリゲートの委任関係を工夫する事により、クラス間の連携をより自由に行う事ができそうです。

全体サンプル gist.github.com