我使用 StoryBoard,我不太确定如何实例化 ViewController 或如何引用一个。
问题是我有两个 View Controller ,一个带有按钮。当我按下第一个 View Controller 的按钮时,我想转到另一个 View Controller 。
我尝试过这样的事情:
let secondViewController:UIViewController = UIViewController()
self.presentViewController(secondViewController, animated: true, completion: nil)
有谁知道如何向我解释?谢谢!
最佳答案
有几种在 View Controller 之间导航的方法。如果你要那样做,这里是你如何在没有 segue 的代码中做到这一点。
以模态方式呈现 View Controller 。
假设 Storyboard中有 2 个 View Controller 场景,FirstViewController
和 SecondViewController
.您要从FirstViewController
过境至 SecondViewController
他们之间没有segue。
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let secondViewController = storyboard.instantiateViewControllerWithIdentifier("SecondVC") as UIViewController
presentViewController(secondViewController, animated: true, completion: nil)
重要的部分是你必须为你想要去的 View Controller 分配一个标识符。在这种情况下,它是
SecondViewController
.分配标识符的方法是选择 View Controller ,打开右侧面板,然后转到 身份检查员 (左起第三个)在 Identity 下,为 分配一个标识符 Storyboard ID field 。我把我的设为 SecondVC
从上面的代码片段可以看出。推送到另一个 View Controller 。
如果你想推送到另一个 View Controller 而不是呈现它,你所要做的就是嵌入
FirstViewController
在 UINavigationController
并将代码更改为此。let storyboard = UIStoryboard(name: "Main", bundle: nil)
let secondViewController = storyboard.instantiateViewControllerWithIdentifier("SecondVC") as UIViewController
navigationController?.pushViewController(secondViewController, animated: true)
在您的评论中,我看到您想根据条件转到下一个 View Controller 。那么您所要做的就是在
if else
中检查您的状况。语句并执行上述代码之一。使用 Segue。
如果您打算使用 segues 而不是代码,这里是您的操作方法。
首先在 Storyboard 中选择按钮并按住 Ctrl 键拖动到另一个 View Controller 。系统会提示您在不同的转场之间进行选择。选择
show
用于推送或 show detail
用于模态转换(我已经解释了下面的内容)。就是这样!如果你运行它并点击按钮,你会被带到另一个 View Controller 。但是如果你想要更多地控制它,你必须做更多的工作......而不是直接从按钮创建一个segue,选择你的 View Controller 并选择顶部的那个小黄色图标(这是在Xcode 6中。在旧的Xcode 版本在 View Controller 场景下)。按住 Ctrl 键从该图标拖动到您要转换到的另一个 View Controller 。您可以看到这两个 Controller 之间出现连接。选择 segue 并打开右侧面板并转到 属性检查器 (左起第四个)。为字段命名 标识符 .我给了
ToSecond
.现在从按钮创建一个正常的 Action 。你必须调用一个名为
performSegueWithIdentifier
的方法传递那个标识符。它所做的基本上是使用我们提供的标识符执行一个 segue。@IBAction func segueButtonPressed(sender: UIButton) {
performSegueWithIdentifier("ToSecond", sender: nil)
}
这会奏效。您可以在
if else
中进行条件检查。如果满足条件,请调用performSegueWithIdentifier
.您可能会遇到的另一件事是在一个 View Controller 中有多个按钮,并在您点击每个按钮时切换到不同的 View Controller 。一个名为
prepareForSegue
的方法每次发生 segue 时都会触发。在其中,您可以检查当前的 segue 标识符并执行它。下面的代码片段将使这更清楚。override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "ToSecond" {
let secondViewController = segue.destinationViewController as SecondViewController
}
}
我想提的另一件事是
presentViewController
和 pushViewController
已从 iOS8 弃用。相反,您可以使用 showDetailViewController
用于模态和 showViewController
推。showDetailViewController(secondViewController, sender: nil)
navigationController?.showViewController(secondViewController, sender: nil)
我不确定这些是否向后兼容。使用
show
的含义和 show detail
如果您也在为 iOS 7 开发,也可以使用。如果你是,那么就坚持使用旧的方法。
关于ios - 移动到另一个 ViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26189588/