导航控制器查看非初始视图控制器的控制器

问题描述 投票:0回答:2

是否可以添加导航控制器和标签栏来查看非初始视图控制器的控制器?

我的“初始视图控制器”是登录屏幕。不需要导航控制器和标签栏。

当我从“编辑器 - >嵌入 - > ...”中添加导航控制器和标签栏时,它们不会出现

登录成功后,我使用此代码:

if let viewController = self.storyboard?.instantiateViewController(withIdentifier: "mainView") {
    UIApplication.shared.keyWindow?.rootViewController = viewController
    self.dismiss(animated: true, completion: nil)
}

我使用Xcode 9和swift 4。

谢谢!

swift xcode uinavigationcontroller
2个回答
0
投票

我想你可能会看错了。始终将登录视图作为视图层次结构中的根控制器,即使不需要也是不好的做法。并且LoginController不应该拥有MainController,但MainController应该拥有LoginController。您应该使用根视图创建主视图(使用导航控制器/选项卡控制器),然后在viewWillAppear方法中检查用户是否经过身份验证;如果用户未经过身份验证,则以模态方式推送登录控制器。这样你的视图层次结构就不那么复杂了。

你可以有一个提供者类CurrentUser

class CurrentUser {
  var user: User? {
    guard let userData = UserDefaults.standard.object(forKey: "user") as? Data,
      let user = NSKeyedUnarchiver.unarchiveObject(with: userData) as? User else {
        return nil
    }
    return user
  }

  static let shared = CurrentUser()
}

MainController.viewWillAppear

override func viewWillAppear() {
  super.viewWillAppear()
  guard let user = CurrentUser.shared.user else {
    pushViewController(LoginController(), animated: true)
  }

  // do additional setup
}

只需我0.02美元。


0
投票

只是回答你的问题,不仅可能,而且很常见。您可以将导航控制器放在任何位置。导航控制器所做的全部工作是为视图控制器的进展创建一个起点,通过保持视图控制器的历史记录保持活动并按顺序进行操作。因此,如果您的应用程序具有3个不同的部分,您可能很可能希望在每个部分中放置导航控制器,以便用户能够独立地深入到每个部分。

© www.soinside.com 2019 - 2024. All rights reserved.