ios - 移动到另一个 ViewController

标签 ios swift ios8

我使用 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 场景,FirstViewControllerSecondViewController .您要从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 而不是呈现它,你所要做的就是嵌入 FirstViewControllerUINavigationController并将代码更改为此。
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
    }
}

我想提的另一件事是 presentViewControllerpushViewController已从 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/

相关文章:

ios - 如何在不为可选参数指定值的情况下快速调用以下函数?

ios - 启动时在 AppDelegate 中将 TabBarViewController 设置为 Root View

ios - 无法呈现 Swifty Button 实例 : dlopen(SwiftyButton. 框架,1):未加载库

ios - 几天后我的 iOS 应用程序中的数据消失了

ios - 长按手势不起作用

ios - 如何在iOS中清除文本字段数据后隐藏 View

ios - 循环后如何在主队列上重新加载表(Objective-c)

swift - EXIF数据读写

objective-c - Touch ID for KeyChain 无 PIN 回退

cordova - PhoneGap 在 iOS8 中使用比 iOS7 更多的内存