无法从以编程方式创建的 UINavigationController 推送
Posted
技术标签:
【中文标题】无法从以编程方式创建的 UINavigationController 推送【英文标题】:Can't push from programmatically created UINavigationController 【发布时间】:2017-04-14 11:57:45 【问题描述】:在使用 Xcode 8.3 和 ios 10.3 的 Swift 3 项目中,我得到了一个导航控制器来推送。该应用程序使用导航控制器运行,直到我尝试使用它来推送。一切正常,直到导致应用程序崩溃的最后一行,fatal error: unexpectedly found nil while unwrapping an Optional value
。我不想使用storyboard,这个问题的重点是如何在没有storyboard的情况下完成这个任务。
应用代理代码
class AppDelegate: UIResponder, UIApplicationDelegate
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool
window = UIWindow(frame: UIScreen.main.bounds)
window?.makeKeyAndVisible()
window?.rootViewController = UINavigationController(rootViewController: MainViewController())
视图控制器:
import UIKit
class MainViewController: UIViewController
override func viewDidLoad()
super.viewDidLoad()
view.backgroundColor = .white
let navController = navigationController
let myProfileViewController = MyProfileViewController()
navController!.pushViewController(myProfileViewController, animated: true)
【问题讨论】:
【参考方案1】:移动
let navController = navigationController
let myProfileViewController = MyProfileViewController()
navController!.pushViewController(myProfileViewController, animated: true)
从viewDidLoad
到viewDidAppear
。
在viewDidLoad
中没有设置父导航控制器,你不应该从那里开始动画。
【讨论】:
【参考方案2】:您可以在情节提要中添加导航控制器, 在情节提要中单击 MainViewController 并从编辑器菜单中添加导航控制器并通过导航控制器推送如下代码。
let vc = self.storyboard?.instantiateViewController(withIdentifier: "MyProfileViewController") as! MyProfileViewController
self.navigationController?.pushViewController(vc, animated: true)
确保故事板标识符正确。 & 从 AppDelegate 类中删除导航控制器代码。
【讨论】:
我不想使用情节提要。我确实知道如何在情节提要中执行此操作,我想知道如何以编程方式执行此操作,但感谢您的回复。【参考方案3】:首先像这样为您的导航控制器命名
然后在您的代码中像这样初始化它
let nav = (UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "yourNavigation") as! UINavigationController);
nav.pushFrontViewController(MainViewController(), animated: true);
window?.rootViewController = nav
【讨论】:
我的导航控制器是以编程方式创建的,故事板中没有任何内容。 以上就是全部了。重现错误应该足够了。 那么你面临的问题是你已经声明了你的 MainViewController 但 UINavigationController 没有被声明或初始化,很抱歉,我的专业知识有限 那我该怎么做呢?请写下您的回复作为答案。 有一个解决方案***.com/questions/28793331/…看看有没有帮助以上是关于无法从以编程方式创建的 UINavigationController 推送的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Storyboard 上创建 Segue,从以编程方式注册的 UICollectionViewCell 到新的 UIViewController?