Segue使用instantiateViewControllerWithIdentifier实例化ViewController

时间:2014-10-14 09:27:07

标签: ios swift segue viewcontroller

是否可以在使用instantiateViewControllerWithIdentifier实例化的ViewControllers视图中使用segues?

这是我正在尝试做的最小例子(我需要在biger项目中使用类似的东西): 在主故事板中,我有一个rootViewController,一个带有StoryboardID“secondViewControllerID”和第三个ViewController的secondViewController。 secondViewController通过show-Segue与第三ViewController按钮连接。

在rootViewController的类中,我实例化了secondViewController并将其视图设置为我的rootViewController的子视图:

import UIKit

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        let storyboard = UIStoryboard(name: "Main", bundle: nil);
        var vc = storyboard.instantiateViewControllerWithIdentifier("secondViewControllerID") as UIViewController
        self.view.addSubview(vc.view)
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

当我现在执行程序时,我正确地看到了子视图(secondViewController)。但是现在segue不再起作用了(当我点击按钮时我没有进入第三个ViewController)

有谁知道为什么?

(我的项目中不可能只使用没有instantiateViewControllerWithIdentifier的secondViewController,因为secondViewController是通过instantiateViewControllerWithIdentifier管理其viewControllers的pageViewController的一部分)

1 个答案:

答案 0 :(得分:0)

您正在添加一个视图控制器的视图作为另一个视图控制器的子视图。但默认情况下,点击和手势由主视图控制器处理,不会传递给子VC - 因此是您的问题。您需要调用一些函数才能使其工作。请查看Apple文档here

查看"创建自定义容器视图控制器"部分。总之,您需要使用addSubviewself.addChildViewController(vc)函数调用来封送vc.didMoveToParentViewController(self)方法调用。