我在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")
}
}
如何从父控制器打印此消息?
答案 0 :(得分:1)
你在为segue做准备时做了什么?你不应该在那里设置你的代表(协议)吗?像这样:
if (segue.identifier == "embedViewSegue"){
if let embed = segue.destinationViewController as? EmbedController {
self.handleEmbedController = embed
}
}
如果在sendMsgButtonAction
中放置断点,您应该会看到属性handleEmbedController
为零。这就是为什么方法调用什么都不做,因为你用?
安全地解开它。