如何在没有 Storyboard 的情况下推送新视图 Swift
Posted
技术标签:
【中文标题】如何在没有 Storyboard 的情况下推送新视图 Swift【英文标题】:How to Push a New View Without Storyboards Swift 【发布时间】:2015-12-31 00:03:07 【问题描述】:首先,我根本不想使用故事板。我能够“呈现”目标视图控制器,但无法通过顶部的标准 ios 后退按钮显示它。我的理解是我可以通过推动控制器而不是展示它来实现它。我没有收到任何错误,但没有任何反应。
在按钮上单击此代码将运行。注释代码是成功呈现 ForgotPasswordPage 的代码:
// 忘记密码页面的变化
func forgotPasswordSwitch(sender: UIButton!)
//let ForgotPassword:ForgotPasswordPage = ForgotPasswordPage()
//self.presentViewController(ForgotPassword, animated: true, completion: nil)
let ForgotPassword = ForgotPasswordPage()
self.navigationController?.pushViewController(ForgotPassword, animated: true)
【问题讨论】:
你是对的 - 新需要使用导航控制器才能推送视图控制器。由于您没有使用情节提要,因此您需要自己创建 UINavigationController 实例并使用它来展示您的初始视图控制器 @Paulw11 你能详细说明一下吗?我将要移动和移动到的页面都声明为 UINavigationControllers。我还需要做什么? 您没有将视图控制器声明为 UINavigationController 子类。 UINavigationController 是一个容器视图控制器。您创建一个,将您的第一个视图控制器分配为其内容,然后呈现 UINavigationController。类参考解释了它是如何工作的developer.apple.com/library/ios/documentation/UIKit/Reference/… 【参考方案1】:您必须手动创建UINavigationcontroller
才能获得返回栏。为此,您可以使用来自this answer 的代码,它通过使用以下代码来实现:
self.window = UIWindow(frame: UIScreen.mainScreen().bounds) var nav1 = UINavigationController() var mainView = ViewController() //ViewController = Name of your controller nav1.viewControllers = [mainView] self.window!.rootViewController = nav1 self.window?.makeKeyAndVisible()
这里只需将您希望在 Navigation 控制器下的所有 ViewController 添加到数组中,然后在它们之间推送。
希望对您有所帮助,朱利安
【讨论】:
非常感谢您的回答!我有一个登录页面,我的目标是允许用户单击“忘记密码”或“帐户注册”按钮,然后可以选择单击顶部并转到登录页面。我会使用这段代码来做到这一点吗?这段代码似乎立即创建了数组中所有视图控制器的堆栈。然后,当单击按钮时,我最初的代码不会让我在它们之间推送。 你可以。这不是最好的方法,但它会起作用。在这种情况下,我只是建议以编程方式创建一个导航栏而不是控制器,然后在按下后退按钮时简单地关闭视图控制器。在这种情况下,后退按钮应该是一个BarButtonItem
,作为操作关闭视图控制器。但是代码应该可以正常工作。我希望这很清楚。如果您需要更多详细说明,请随时询问:-)
谢谢!我会试试看!【参考方案2】:
我知道有时以编程方式开发应用程序要好得多,但 Storyboard 可以为您节省很多时间。您只需在这种情况下使用它...
1) 在您的 Storyboard 中,本地化您想要启用推送的视图控制器
2) 选择它并在顶部栏中找到“编辑器”
3) 选择编辑器->嵌入->导航控制器
现在你的视图控制器已经准备好推送了
【讨论】:
我们这样做主要是因为它在 github 上更容易同步。不过谢谢! 故事板并不是你真正使用的东西,因为没有它你不知道该怎么做。以上是关于如何在没有 Storyboard 的情况下推送新视图 Swift的主要内容,如果未能解决你的问题,请参考以下文章
如何在没有 IBOutlet 或标识符的情况下从 Storyboard 更新约束?
Xcode 5 - iOS - 如何在没有 Storyboard 或 XIB 的情况下在 Xcode 中创建视图控制器以及如何将其配置为 AppDelegate 作为根视图