移动到另一个ViewController

LPS*_*LPS 1 ios swift ios8

我正在使用StoryBoard,我不太确定如何实例化ViewController或如何引用它.

事情是我有两个视图控制器,我有一个按钮.当我从第一个视图控制器按下按钮时,我想转到另一个视图控制器.

我尝试过类似的东西:

let secondViewController:UIViewController = UIViewController()
self.presentViewController(secondViewController, animated: true, completion: nil)
Run Code Online (Sandbox Code Playgroud)

有谁知道怎么解释给我?谢谢!

Isu*_*uru 11

在视图控制器之间有几种导航方式.如果你这样做,这就是你如何在没有segue的代码中做到这一点.

以模态方式呈现视图控制器.

假设你在故事板中有2个视图控制器场景,FirstViewController并且SecondViewController.你想从中转移FirstViewControllerSecondViewController它们之间没有任何区别.

let storyboard = UIStoryboard(name: "Main", bundle: nil)
let secondViewController = storyboard.instantiateViewControllerWithIdentifier("SecondVC") as UIViewController
presentViewController(secondViewController, animated: true, completion: nil)
Run Code Online (Sandbox Code Playgroud)

重要的是你必须为你想要的视图控制器分配一个标识符.在这种情况下它的SecondViewController.分配标识符的方式是选择视图控制器,打开右侧面板,然后转到Identity Inspector(左起第三个),在Identity下,为Storyboard ID字段分配一个标识符.我SecondVC从上面的代码片段中看到了我的内容.

推送到另一个视图控制器.

如果你想要推送到另一个视图控制器而不是呈现它,你所要做的就是嵌入FirstViewController一个UINavigationController并将代码改为此.

let storyboard = UIStoryboard(name: "Main", bundle: nil)
let secondViewController = storyboard.instantiateViewControllerWithIdentifier("SecondVC") as UIViewController
navigationController?.pushViewController(secondViewController, animated: true)
Run Code Online (Sandbox Code Playgroud)

在你的评论中,我看到你想根据条件转到下一个视图控制器.所有你需要做的就是在一个if else声明中检查你的条件并执行上述代码中的任何一个.


使用Segues.

如果您要使用segues而不是代码,请按照以下步骤操作.

首先在故事板中选择按钮,然后按住Ctrl键拖动到另一个视图控制器.系统会提示您在不同的段之间进行选择.选择show推送或show detail模态转换(我已经解释了下面的内容).就是这样!如果您运行它并点击按钮,您将被带到另一个视图控制器.

但是如果你想要更多地控制它,你必须做更多的工作..不要直接从按钮创建一个segue,而是选择你的视图控制器并在顶部选择那个小黄色图标(这是在Xcode 6中. Xcode版本在视图控制器场景下).按住Ctrl键从该图标拖动到要转接到的另一个视图控制器.您可以看到这两个控制器之间出现连接.选择segue并打开右侧面板,然后转到Attributes Inspector(左起第四个).为字段标识符命名.我给了ToSecond.

现在从按钮创建一个正常的操作.而且你必须调用一个名为performSegueWithIdentifier传递该标识符的方法.它的作用基本上是用我们给出的标识符执行segue.

@IBAction func segueButtonPressed(sender: UIButton) {
    performSegueWithIdentifier("ToSecond", sender: nil)
}
Run Code Online (Sandbox Code Playgroud)

这会奏效.您可以在此处进行条件检查if else,如果满足条件,请致电performSegueWithIdentifier.

您可能面临的另一件事是在视图控制器中有多个按钮,当您点击每个按钮时,它们会转到不同的视图控制器.prepareForSegue每次发生segue时都会触发一个方法.在其中,您可以检查当前的segue标识符并执行它.以下代码片段将使此更清晰.

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "ToSecond" {
        let secondViewController = segue.destinationViewController as SecondViewController
    }
}
Run Code Online (Sandbox Code Playgroud)

我想提到的另一件事是,presentViewController并且pushViewController已经从iOS8中弃用了.相反,你可以使用showDetailViewController模态和showViewController推动.

showDetailViewController(secondViewController, sender: nil)

navigationController?.showViewController(secondViewController, sender: nil)
Run Code Online (Sandbox Code Playgroud)

我不确定这些是否向后兼容.意思是使用show并且show detail如果您正在为iOS 7开发也将起作用.如果你只是坚持旧的方法.