我正在使用StoryBoard,我不太确定如何实例化ViewController或如何引用它。
事情是我有两个视图控制器,我有一个按钮。当我从第一个视图控制器按下按钮时,我想转到另一个视图控制器。
我尝试过类似的东西:
let secondViewController:UIViewController = UIViewController()
self.presentViewController(secondViewController, animated: true, completion: nil)
有谁知道如何向我解释?谢谢!
答案 0 :(得分:11)
在视图控制器之间导航有两种方法。如果你这样做,这就是你如何在没有segue的代码中完成它。
以模态方式呈现视图控制器。
假设故事板中有2个视图控制器场景,FirstViewController
和SecondViewController
。您希望从FirstViewController
转到SecondViewController
,并且它们之间没有任何区别。
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let secondViewController = storyboard.instantiateViewControllerWithIdentifier("SecondVC") as UIViewController
presentViewController(secondViewController, animated: true, completion: nil)
重要的是你必须为你想去的视图控制器分配一个标识符。在这种情况下,它是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)
在你的评论中,我看到你想根据条件转到下一个视图控制器。那么你所要做的就是在if else
语句中检查你的条件并执行上述代码中的任何一个。
使用Segues。
如果您要使用segues而不是代码,请按以下步骤操作。
首先在故事板中选择按钮,然后按住Ctrl键拖动到另一个视图控制器。系统会提示您在不同的段之间进行选择。选择show
进行推送或show detail
进行模态转换(我已经解释了下面的内容)。就是这样!如果你运行它并点击按钮,你将被带到另一个视图控制器。
但是如果你想要更多地控制它,你必须做更多的工作..不要直接从按钮创建一个segue,而是选择你的视图控制器并在顶部选择那个小黄色图标(这是在Xcode 6中在较旧的Xcode版本中,它位于视图控制器场景下)。按住Ctrl键从该图标拖动到要转接到的另一个视图控制器。您可以看到这两个控制器之间出现连接。选择segue并打开右侧面板,然后转到属性检查器(左侧第四个)。为字段标识符命名。我给了ToSecond
。
现在从按钮创建一个正常的操作。而且你必须调用一个名为performSegueWithIdentifier
的方法来传递该标识符。它的作用基本上是用我们给出的标识符执行一个segue。
@IBAction func segueButtonPressed(sender: UIButton) {
performSegueWithIdentifier("ToSecond", sender: nil)
}
这会奏效。您可以在if else
内执行条件检查,如果符合条件,请致电performSegueWithIdentifier
。
您可能面临的另一件事是在视图控制器中有多个按钮,当您点击每个按钮时,它会转到不同的视图控制器。每次发生segue时都会触发一个名为prepareForSegue
的方法。在其中,您可以检查当前的segue标识符并执行它。下面的代码片段会更清楚。
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "ToSecond" {
let secondViewController = segue.destinationViewController as SecondViewController
}
}
我想提到的另一件事是从iOS8弃用了presentViewController
和pushViewController
。相反,您可以使用showDetailViewController
进行模式,使用showViewController
进行推送。
showDetailViewController(secondViewController, sender: nil)
navigationController?.showViewController(secondViewController, sender: nil)
我不确定这些是否向后兼容。如果您正在为iOS 7开发,使用show
和show detail
的含义也会有效。如果你只是坚持使用旧方法。
答案 1 :(得分:1)
首先设置uistoryboardviewcontroller的seques并试试这个
self.performSegueWithIdentifier("push", sender: self)
override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) {
if segue.identifier == "push" {
}
答案 2 :(得分:0)
在故事板中,选择VC1然后选择按钮并按下控制按钮,同时按住左按钮或触摸板拖动到VC2。然后会弹出一个菜单。选择模态。
运行并测试。它现在应该执行转换。
要转换回来,最简单的方法是将VC1嵌入导航控制器中。要执行此操作,请缩小,选择VC1并转到屏幕顶部并选择:
编辑器>嵌入>导航视图控制器。
现在测试并运行。您应该可以选择返回。
答案 3 :(得分:0)
行,
在界面构建器控件中单击您的按钮并将显示的蓝线拖到第二个视图控制器。第二个视图控制器将突出显示蓝色。您可以释放并且按钮已连接。在弹出菜单中选择" modal segue"。没有必要的代码。 XCODE处理它。
观看this视频观看演示。
答案 4 :(得分:0)
如果以编程方式绑定视图控制器,则在创建基于故事板的应用程序时需要执行此步骤。
与Objective-c中的内容类似,只是语法发生了变化。
根据您的问题,您需要做的是转到Main.storyboard并需要选择身份检查员。 在那里,您将能够查看包含两个字段的标识 1.)故事板ID 2.)恢复ID
为他们提供您在故事板ID中与类绑定的视图控制器的名称,并选中恢复ID下面的复选框。它将自动复制故障板ID在恢复ID中。
您需要为所有视图控制器执行相同操作。
let secondView = self.storyboard?.instantiateViewControllerWithIdentifier("SecondViewController") as SecondViewController
self.presentViewController(secondView, animated: true, completion: nil)
您需要写下您在self.storyboard?.instantiateViewControllerWithIdentifier("/* Storyboard ID */")
您还可以访问以下链接: Instantiate and Present a viewController in Swift