![](/img/trans.png)
[英]Setting custom delegate with instantiateViewControllerWithIdentifier
[英]Delegate not being called (instantiateViewControllerWithIdentifier)
我的故事板中有5个CalculatorViewController实例,但是只有一个标识符为“ secondOperationViewController”的实例。 他们中的3个使用嵌入的segues连接到我最初的名为ContainerViewController的ViewController。
我希望带有标识符“ secondOperationViewController”的ViewController从我的ContainerViewController调用方法,但是我无法正确地实例化它,因此未调用委托方法。 这是我的代码的一部分:
override func viewDidLoad() {
super.viewDidLoad()
secondOperationViewController = storyboard.instantiateViewControllerWithIdentifier("secondOperationViewController") as? CalculatorViewController
secondOperationViewController!.delegate = self
println(secondOperationViewController)
}
有什么建议吗?
我也发现了类似的问题:
我将CalculatorViewController的实例重写为:
override func prepareForSegue(segue: UIStoryboardSegue?, sender: AnyObject?) {
secondOperationViewController = segue!.destinationViewController as? CalculatorViewController
secondOperationViewController!.delegate = self;
}
它可以工作,但是我的委托方法是从连接到初始ViewController的所有3个ViewController调用的,因此我需要另一个解决方案。
那么,如何从具有指定标识符的ViewController中完全调用委托方法呢? 有任何想法吗?
因此,embed segue不适用于“ instantiateViewControllerWithIdentifier”(但适用于模式呈现的segue)。 我不知道为什么。 这是嵌入segue的解决方案:
override func viewDidLoad() {
super.viewDidLoad()
let secondOperationViewController:CalculatorViewController = childViewControllers[0] as CalculatorViewController
secondOperationViewController.delegate = self
}
在情节提要中为您的segue赋予唯一标识符:
然后在设置prepareForSegue
之前,在prepareForSegue
检查,以这种方式确切地知道何时设置该代理。
override func prepareForSegue(segue: UIStoryboardSegue?, sender: AnyObject?) {
// Checking to make sure this is the correct segue. This is also protection for the "as?"
if segue?.identifier == "SecondOVCSeuge" {
secondOperationViewController = segue!.destinationViewController as? CalculatorViewController
secondOperationViewController!.delegate = self;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.