从新的故事板中实例化ViewController

时间:2016-05-21 16:01:14

标签: ios xcode swift uiviewcontroller storyboard

我刚刚做了一个小转换,所以我的项目加载了一个不同的故事板作为它的主要部分(在info.plist中做了)。

我有我的新故事板,以保持我的viewController负责登录屏幕等。只是为了让它更清晰。

点击登录按钮后,我想从另一个故事板启动navigationController:

func instantiateViewController(fromStoryboard storyboard: String, withIdentifier identifier: String) -> UIViewController! {
    let storyboard = UIStoryboard(name: storyboard, bundle: nil)
    let viewController = storyboard.instantiateViewControllerWithIdentifier(identifier)
    return viewController
}
@IBAction func loginButtonTapped(sender: UIButton) {
    let viewController = instantiateViewController(fromStoryboard: "Main", withIdentifier: "MainNavigationController")
    presentViewController(viewController, animated: true, completion: nil)
}

一切正常但有一件事让我疯了。 从Main.storyboard呈现MainNavigationController后,不维护其视图层次结构。

我的意思是,应该在另一个全屏UIView(但不是它的孩子,因此它们应该保留)之上的标签和按钮现在已经落后了。

可能导致这种情况的原因是什么是让它们出现在最顶层的最简单方法(就像我们打开main.storyboard时那样)

修改

我在viewDidLoad方法的MainNavigationController的rootView中添加了一行代码:

self.view.sendSubviewToBack(wholeScreenView)

它解决了这个问题。

但是,是否有人知道为什么我必须自己编写代码并且视图与Main.storyboard中的不一样?

1 个答案:

答案 0 :(得分:0)

故事板未按您认为的方式配置。您的wholeScreenView 实际上是在故事板中的其他视图前面。其他视图(标签和按钮)不是wholeScreenView的子视图;它们是主视图的子视图,wholeScreenView也是如此。这是一个后来的子视图,所以它就在它们面前。