委托未被调用(instantiateViewControllerWithIdentifier)

时间:2014-06-16 16:08:53

标签: ios uiviewcontroller delegates swift instantiation

我在storyboard中有5个CalculatorViewController实例,但只有一个带有标识符" secondOperationViewController"。其中3个使用embed segues与名为ContainerViewController的初始ViewController连接。

我希望ViewController带有标识符" secondOperationViewController"从我的ContainerViewController调用方法,但我无法正确实例化它,因此委托方法没有被调用。这是我的代码的一部分:

override func viewDidLoad() {
    super.viewDidLoad()
    secondOperationViewController = storyboard.instantiateViewControllerWithIdentifier("secondOperationViewController") as? CalculatorViewController
    secondOperationViewController!.delegate = self
    println(secondOperationViewController)
}

有什么建议吗?

我也发现了类似的问题:

Delegate in Swift-language

我将我的CalculatorViewController的实例重新编写为:

override func prepareForSegue(segue: UIStoryboardSegue?, sender: AnyObject?) {
        secondOperationViewController = segue!.destinationViewController as? CalculatorViewController
        secondOperationViewController!.delegate = self;
    }

它可以工作,但我的委托方法是从连接到初始ViewController的所有3个ViewControllers调用的,所以我需要另一个解决方案。

那么如何从具有指定标识符的ViewController中精确调用委托方法呢?有什么想法吗?


因此,嵌入segue不能使用" instantiateViewControllerWithIdentifier" (但使用模态显示segue)。我不知道为什么。这是嵌入segue的解决方案:

override func viewDidLoad() {
    super.viewDidLoad()
    let secondOperationViewController:CalculatorViewController = childViewControllers[0] as CalculatorViewController
    secondOperationViewController.delegate = self
}

1 个答案:

答案 0 :(得分:0)

在故事板中为您的segue提供唯一标识符:

enter image description here

然后在您设置委托之前对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;
    }       
}