Swift 如何将导航控制器添加到';它不是最初的UIViewController
好的,我希望这个问题的标题有意义。基本上,我有一个应用程序,有一个登录屏幕,一旦你登录,它会带你到另一个视图控制器。登录屏幕被设置为初始视图控制器,它没有导航控制器,因为我不希望用户返回该屏幕,除非他们注销。因此,我通过storyboard向mainViewController添加了一个导航控制器,它是登录后显示的控制器。但导航控制器未显示。我不确定这是否与我展示mainViewController的方式有关,但我会向您展示我的代码,让您来评判Swift 如何将导航控制器添加到';它不是最初的UIViewController,swift,swift4,Swift,Swift4,好的,我希望这个问题的标题有意义。基本上,我有一个应用程序,有一个登录屏幕,一旦你登录,它会带你到另一个视图控制器。登录屏幕被设置为初始视图控制器,它没有导航控制器,因为我不希望用户返回该屏幕,除非他们注销。因此,我通过storyboard向mainViewController添加了一个导航控制器,它是登录后显示的控制器。但导航控制器未显示。我不确定这是否与我展示mainViewController的方式有关,但我会向您展示我的代码,让您来评判 我从未在AppDelegate类中添加任何其他代
我从未在AppDelegate类中添加任何其他代码,因此我不确定是否必须在那里执行某些操作 您可以通过在UINavigationController中设置
rootViewController
以编程方式执行此操作`
let pushedViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "mainViewController") as! mainViewController
let vc = UINavigationController.init(rootViewController: pushedViewController)
self.present(vc, animated: true, completion: nil)
如果您从情节提要中获取导航控制器,则显示导航控制器而不是
mainViewController
为此:
您可以将标识符分配给navigationController作为“mainViewControllerNav”
,然后将代码更新为:
let vc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "mainViewControllerNav")
self.present(vc, animated: true, completion: nil)
现在您正在演示导航控制器,导航控制器将加载堆栈中的第一个viewcontroller,即您的“mainViewController”
相反:
我建议您将登录和注销时的根目录更改为:
if let navVC = UIStoryboard(name: "Main", bundle: Bundle.main).instantiateViewController(withIdentifier: "mainViewControllerNav") as? UINavigationController,
let appDelegate = UIApplication.shared.delegate as? AppDelegate {
appDelegate.window?.rootViewController = navVC
appDelegate.window?.makeKeyAndVisible()
}
希望这对你有帮助。是的,你说得对。您需要在AppDelegate类中添加UserDefault以检查登录的用户。然后添加条件语句以推送到登录屏幕或不推送到登录屏幕。@PiyushMathur,因此我不必将根视图控制器设置为我的导航,但下面的答案有效,因为我很笨,忘记了添加脚本标识符。谢谢你的回答,因为这同样有效!还有,我不明白为什么我的问题被否决了。如果你否决了我的问题,你能提供反馈吗?那不是我。但当问题重复时,会投反对票;当问题不清楚的时候。所以我想建议你先搜索与你相同的问题的答案。@PiyushMathur明白了,谢谢!这成功了!非常感谢。我太笨了…我以前有过这个,但忘了使用故事板标识符…而且,我不明白为什么我的问题被否决了。如果你否决了我的问题,你能提供反馈吗?@Mikekofer,Welcome:)因此我不必将根视图控制器设置为我的导航,但上面的答案起作用了,因为我很笨,忘了添加我的故事板标识符。谢谢你的回答,因为这同样有效!还有,我不明白为什么我的问题被否决了。如果你否决了我的问题,你能提供反馈意见吗?我不是被否决的人,我真的不明白为什么被否决。。。也许有人不喜欢这样一个事实:它给人一种文本墙的感觉,没有任何突出显示的关键组件。
if let navVC = UIStoryboard(name: "Main", bundle: Bundle.main).instantiateViewController(withIdentifier: "mainViewControllerNav") as? UINavigationController,
let appDelegate = UIApplication.shared.delegate as? AppDelegate {
appDelegate.window?.rootViewController = navVC
appDelegate.window?.makeKeyAndVisible()
}