通过代码从一个ViewController切换到另一个

时间:2015-03-05 07:45:23

标签: ios swift uiviewcontroller

我想通过代码从已经活动的ViewController中简单地显示第二个ViewController。我想尽可能只使用编码(而不是故事板中的拖放)来做到这一点

我尝试按照以下步骤操作,但第二个视图没有弹出。

我的故事板。左边是初始视图,右边是我想从初始视图打开的视图。在屏幕上单击了右视图,因此您可以在右侧看到属性:

enter image description here

我最初的UIViewcontroller类:

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad();
        dosomestuff();

        showTimeline(); // << --------------------
    }


func showTimeline() {

    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let vc = storyboard.instantiateViewControllerWithIdentifier("Timeline") as! UIViewController
    self.presentViewController(vc, animated: true, completion: nil)
    //self.showViewController(vc, sender: self);

}

问题更新,因为我不清楚我在问什么: 当我启动应用程序时,只有第一个屏幕出现。没有崩溃只是日志中的警告“警告:尝试显示其视图不在窗口层次结构中!”

任何帮助如何做到这一点?

3 个答案:

答案 0 :(得分:2)

当视图确实加载被调用时,视图控制器实际上不是视图层次结构的一部分(并且通常不是视图控制器层次结构的一部分),因此不能呈现其他视图。您尝试时应该看到日志警告。另外,如果它始终呈现另一个视图,第一个视图的重点是什么,为什么不将第二个视图作为根...

因此,通过更改根控制器或在屏幕上实际显示当前根视图后显示来更改演示文稿。

答案 1 :(得分:0)

您不应在viewDidLoad中显示视图控制器。呈现新视图控制器的适当位置是在呈现当前视图之后。

尝试从showTimeLine()

致电viewDidAppear()

答案 2 :(得分:0)

如Wain所述,您需要像这样更改rootController

func showTimeline() {

    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let vc = storyboard.instantiateViewControllerWithIdentifier("Timeline") as! UIViewController
    UIApplication.sharedApplication().keyWindow.rootViewController = vc;
}

或将showTimeline()添加到ViewDidAppear:

override func viewDidAppear(animated: Bool) {
        super.viewDidAppear(animated)
        showTimeline();
    }

认为它应该有用;)