2016-05-17 5 views
0

2番目のビューコントローラにいくつかのメソッドがあります。私は代理人を介してそれらにアクセスします - 内部func buttonSender。主な目的は、ボタンのcurrentTitleを引数としてviewController.addNewMessageに渡すことです。これを行う最善の方法は何ですか?IBAction内で委託メソッドを実行するにはどうすればよいですか?

ChatViewController:

protocol ReactToButtons { 
    func buttonSender(viewController: MyChatViewController) 
} 


class MyChatViewController: ChatViewController{ 

    var delegate: ReactToButtons? 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     delegate!.buttonSender(self) 

    } 
} 

ContainerViewController:

class ContainerViewController: UIViewController, ReactToButtons { 
    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
     let myVC = segue.destinationViewController as! MyChatViewController 
     myVC.delegate = self 
    } 

    func buttonSender(viewController: MyChatViewController) { 
     viewController.addNewMessage(/*HERE GOES CURRENT TITLE*/) 
    } 

    @IBAction func leftButtonPressed(sender: AnyObject) { 
     let currentTitle = sender.currentTitle! 

    } 
+0

に合わせて私の答えを変更しています{'任意のボタンメソッドを使用します。 – kennytm

+0

それはそうではありません。私は2番目のビューコントローラでいくつかのメソッドを持っています。私は代理人を介してそれらにアクセスします - 内部func buttonSender。主な目的は、ボタンのcurrentTitleを引数としてviewController.addNewMessageに渡すことです。 – loup4

+0

delegateメソッドのシグネチャをcurrentTitleも含めて変更することはできませんか? –

答えて

1

私はあなたがleftButtonPressed(送信者:UIButton)FUNC `@IBActionを書くことができ、あなたのコード

class ContainerViewController: UIViewController, ReactToButtons { 
    var delegate: MyChatViewController! 
    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
     let myVC = segue.destinationViewController as! MyChatViewController 
     myVC.delegate = self 
    } 

    func buttonSender(viewController: MyChatViewController) { 
    delegate = viewController 
    } 

    @IBAction func leftButtonPressed(sender: AnyObject) { 
     let currentTitle = sender.currentTitle! 
     delegate!.addNewMessage(currentTitle) 
    } 
} 
+0

私はこの答えを本当に理解していません。私はすでに 'ReactToButtons {func buttonSender(viewController:SecondViewController)}'プロトコルを持っていて、 'Second delegate:ReactToButtons? 'のようなクラスはviewDidLoad' delegate!.buttonSender(self) 'にあります。なぜここで別のプロトコルを作成する必要がありますか? – loup4

+0

@ loup4あなたのコードでは、containerViewControllerにbuttonSenderを保存してIBActionで呼び出す変数が必要です。 –

+0

@ loup4実際にはMyChatViewControllerをcontainerViewControllerの代理人にして、IBActionで代理人を呼び出すことができます直接 –

関連する問題