如何在Swift中不使用故事板推出新视图

6

首先,我不想使用storyboard。我能够“present”目标视图控制器,但我无法让其显示标准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
@Paulw11,您能否详细说明一下?我已将我要移动的页面和要移动到的页面都声明为UINavigationControllers。我还需要做什么? - DMop
你没有声明你的视图控制器为UINavigationController子类。UINavigationController是一个容器视图控制器。你需要创建一个,将你的第一个视图控制器分配为它的内容,然后呈现UINavigationController。该类参考文档解释了它的工作原理 https://developer.apple.com/library/ios/documentation/UIKit/Reference/UINavigationController_Class/ - Paulw11
2个回答

3

要获得返回栏,您需要手动创建一个UINavigationcontroller。为此,您可以使用这个答案中的代码,它通过使用以下代码来实现:

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()

在这里,只需将您想要放置在导航控制器下的所有视图控制器添加到数组中,然后在它们之间进行推送即可。

希望这能有所帮助,祝好,Julian


非常感谢您的回答!我有一个登录页面,希望允许用户点击“忘记密码”或“账户注册”按钮,然后有选项可以在顶部点击返回并返回到登录页面。我应该使用这段代码来实现吗?这段代码似乎立即创建了一个包含所有视图控制器的堆栈数组。然后我原先的代码在按钮被点击时无法在它们之间进行推送。 - DMop
你可以这样做。虽然不是最好的方法,但它可以工作。在这种情况下,我建议通过编程方式创建一个导航栏而不是控制器,然后在按下返回按钮时简单地关闭视图控制器。在这种情况下,返回按钮应该是一个BarButtonItem,其操作是关闭视图控制器。然而,代码应该能够正常工作。希望这很清楚。如果需要更多解释,请随时问 :-) - Julian E.
谢谢!我会尝试一下的! - DMop

0

我知道有时候以编程的方式开发应用程序会更好,但是在许多情况下,Storyboard 可以为您节省大量时间。您只需在以下情况下使用它...

1)在 Storyboard 中,将您想要启用推送的视图控制器本地化

2)选择它并在顶部栏中找到“编辑器”

3)选择“编辑器” -> “嵌入式” -> “导航控制器”

现在您的视图控制器已准备好进行推送了


我们这样做主要是因为它在 GitHub 上同步更容易。不过还是谢谢你! - DMop
故事板并不是你在某个时候不知道如何做某件事情时才会使用的工具。 - Abandoned Cart

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接