如何从父UIViewController调用嵌入在容器中的UIViewController内的方法?

时间:2016-04-04 09:23:07

标签: ios swift uiviewcontroller protocols

我在swift中有一个ios应用程序,我有一个容器UIViewController(让我们称之为parentController)。这个容器嵌入了另一个名为embedController的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 个答案:

答案 0 :(得分:1)

你在为segue做准备时做了什么?你不应该在那里设置你的代表(协议)吗?像这样:

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

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

}

如果在sendMsgButtonAction中放置断点,您应该会看到属性handleEmbedController为零。这就是为什么方法调用什么都不做,因为你用?安全地解开它。