2016-05-17 5 views
0

Ich habe einige Methoden in Second-View-Controller. Ich greife auf sie über Delegate - Inside Func ButtonSender. Hauptziel ist es, currentTitle einer Schaltfläche als Argument an eine viewController.addNewMessage zu übergeben. Was ist der beste Weg, dies zu tun?Wie kann ich die delegierte Methode in IBAction ausführen?

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

Sie schreiben könnte passen '@IBAction func leftButtonPressed (Sender: UIButton) {'um irgendwelche Knopfmethoden zu benutzen. – kennytm

+0

Nun, das ist nicht der Fall. Ich habe einige Methoden in Second-View-Controller. Ich greife auf sie über Delegate - Inside Func ButtonSender. Hauptziel ist das Übergeben von currentTitle einer Schaltfläche als Argument an eine viewController.addNewMessage – loup4

+0

können Sie die Delegate-Methodensignatur nicht ändern, um currentTitle ebenfalls einzuschließen? –

Antwort

1

Ich habe meine Antwort ändern Code

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

Ich verstehe diese Antwort nicht wirklich. Ich habe bereits 'Protokoll ReactToButtons {func buttonSender (viewController: SecondViewController)}}' und die Klasse SecondViewController ist wie 'var delegate: ReactToButtons?', In viewDidLoad 'delegate! .buttonSender (self)'. Warum sollte ich hier ein anderes Protokoll erstellen? – loup4

+0

@ loup4 Ich sehe es, in Ihrem Code benötigt der ContainerViewController eine Variable um den ButtonSender zu speichern und dann in Ihrer IBAction aufzurufen –

+0

@ loup4 Eigentlich können Sie den MyChatViewController einfach zum Delegaten von containerViewController machen und den Delegaten in Ihrer IBAction aufrufen direkt –