2016-04-04 6 views
0

私は即座にiosアプリを持っており、私はUIViewController(それをparentControllerと呼ぶ)をコンテナに持っています。このコンテナには、別のUIViewControllerというembedControllerが埋め込まれています。親UIViewControllerからコンテナに埋め込まれたUIViewController内部のメソッドを呼び出すにはどうすればよいですか?

embedControllerには、コンソールにメッセージを出力するメソッドが含まれています。

このメソッドをparentControllerからどのように呼び出すことができますか?

私は次のように私の現在のコードは、プロトコルを使用してみました:

class ParentController: UIViewController { 

    var handleEmbedController:HandleEmbedController? 


     override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if (segue.identifier == "embedViewSegue"){ 

     if let embed = segue.destinationViewController as? EmbedController { 
      embed.value1 = value1 
     } 

    } 

    @IBAction func sendMsgButtonAction(sender: AnyObject) { 

     handleEmbedController?.printMsg() //this so far does nothing 


    } 



} 

と私のembedControllerを:

私は親コントローラからこのメッセージを印刷することができますどのように
protocol HandleEmbedController: class { 
    func printMsg() 
} 

class EmbedController: UITableViewController, HandleEmbedController{ 

    var value1 = "" 

    func printMsg(){ 
     print("printing some embedded message") 
    } 

} 

答えて

1

あなたはセグの準備に何をしていますか?デリゲート(プロトコル)をそこに設定するはずがありませんか?このように:あなたはsendMsgButtonActionにブレークポイントを置く場合

if (segue.identifier == "embedViewSegue"){ 

    if let embed = segue.destinationViewController as? EmbedController  { 
     self.handleEmbedController = embed 
    } 

} 

あなたはプロパティhandleEmbedControllerがnilであることがわかります。それで、?で安全にアンラップしているので、メソッド呼び出しは何もしません。

+0

ありがとう、それは私が行方不明だった部分でした! – user3766930

関連する問題