2016-04-04 10 views
0

Hızlı bir ios uygulamasına sahibim ve UIViewController (buna parentController diyoruz) bir kapsayıcım var. Bu kapsayıcı, embedController adında başka bir UIViewController gömer.Bir UIViewController üst öğesinden bir kapsayıcıya gömülü bir UIViewController içindeki bir yöntemi nasıl çağırabilirim?

embedController bir konsola mesaj basan bir yöntem içerir.

Bu yöntemi parentController aracımdan nasıl çağırabilirim?

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 


    } 



} 

ve benim embedController:

protocol HandleEmbedController: class { 
    func printMsg() 
} 

class EmbedController: UITableViewController, HandleEmbedController{ 

    var value1 = "" 

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

} 

nasıl bir ebeveyn denetleyicisi bu mesajı yazdırabilirsiniz şöyle Ben protokollerini kullanmaya çalıştı

, benim şimdiki kodudur?

cevap

1

Hazırlıklarınız için ne yapıyorsunuz? Temsilcinizi (protokol) orada ayarlamamanız gerekmiyor mu? Bu gibisin: sendMsgButtonAction bir kesme noktası koyarsanız

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

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

} 

mülk handleEmbedController sıfır olduğunu görmelisiniz. Bu nedenle, yöntem çağrısı, ? ile güvenli bir şekilde açıldığınızdan beri hiçbir şey yapmaz.

+0

Teşekkür ederim, eksik olduğum kısım buydu !! – user3766930

İlgili konular