2017-06-08 5 views
1

私はUITableViewのカスタムセルを持っています。ユーザーがセル内のボタンをタップすると、現在のViewController1からViewController2にナビゲートする必要があります。私は、カスタムセルクラスでボタンアクションを定義しました。しかし、ViewController1への呼び出しが必要です。2つのクラス間の通信にすぐに閉鎖できますか?

私は閉鎖を使用してみました。これは、目的のCでブロックを使用するのと似ています。同じクラスで使用するとうまく動作します。しかし、2つの異なるクラスで使用中にエラーを取得します。

+0

あなたが試したもの(いくつかのコード)を投稿してください。 2つのVC間でクロージャを渡すことは可能です。 – Brduca

+0

プロトコルを使用する必要があります。すぐに回答を投稿します –

+0

はい、代わりに代理人とプロトコルまたは通知を使用してください! – LinusGeffarth

答えて

0

ここにデリゲートプロトコルを使用する必要があります。

例:何かがcellで起こったときUserItemを送信するためのプロトコル:あなたのcontroller

protocol TappedUserDelegate: class { 
    func userInfoTapped(_ tappedUser: UserItem?) 
} 

:あなたのtableView FUNCで

extension Controller: TappedUserDelegate { 
    func userInfoTapped(_ user: UserItem?) { 
     // user is tapped user in cell  
    } 
} 

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    // ........ 
    cell.delegateUserTaps = self // for user info taps to perform segue 
    // ........ 
} 
カスタム cellで210

userInfoTappedが呼び出されます
class CustomCell: UITableViewCell { 
    weak var delegateUserTaps: TappedUserDelegate? // for sending user info 

    // ........ 
    func userInfoTapped() { 
     delegateUserTaps?.userInfoTapped(userItem) // <- send data to controller 
    } 
} 

は、コントローラでの機能は、このユーザーに実行されます。

私はあなたに考えを与えました。

希望します。

+0

ありがとうございます。私は15の評判を持っていないので、私はあなたの答えをupvoteすることができません。 – ABM

+0

@ABMあなたが助けてくれたらそれを受け入れることができます。プレスジャドー –

関連する問題