如何在没有 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 作为根视图

如何在没有firebase的情况下显示推送通知?

如何在没有徽章编号的情况下推送通知?

如何在没有 iPhone 的情况下测试 Apple 推送通知服务?

如何在没有 OneSignal Dashboard 的情况下发送推送通知?