【问题标题】:Presenting a tabBarController from code removes the navigation bar buttons and title从代码中显示 tabBarController 会删除导航栏按钮和标题
【发布时间】:2017-01-11 01:07:00
【问题描述】:

我正在尝试在应用启动时使用代码(不是故事板 segue)呈现 tabBarController。如果用户已注册,应用程序应在 tabBarVC 上打开,如果用户需要注册/登录,则会显示 loginVC。我打电话给didFinishLaunchingWithOptions

if currentUser != nil {

    initialVC("tabBarVC")

} else {

    initialVC("loginVC")

}

初始VC函数是:

func initialVC(storyboardID: String) {

    let mainStoryboard : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
    let initialViewController : UIViewController = mainStoryboard.instantiateViewControllerWithIdentifier("\(storyboardID)") as UIViewController
    let navController = UINavigationController(rootViewController: initialViewController)
    self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
    self.window?.rootViewController = navController
    self.window?.makeKeyAndVisible()

}

当 tabBarViewController 出现时,导航栏按钮和标题不会出现。如果我直接连接到 tabBarController 中的 VC,导航栏会正确显示,但不会按预期显示标签栏。 如何呈现 tabBarVC 并让导航栏正确显示?

【问题讨论】:

    标签: ios swift xcode uinavigationcontroller uitabbarcontroller


    【解决方案1】:

    我试图用navController 呈现tabBarController。我最终使用的代码工作

    didFinishLaunchingWithOptions:

    if currentUser != nil {
    
        initialVC("tabBarVC")
    
    } else {
    
        initialVC("loginVC")
    
    }
    

    功能:

    func initialVC(storyboardID: String) {
    
        let mainStoryboard : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
        let initialViewController : UIViewController = mainStoryboard.instantiateViewControllerWithIdentifier("\(storyboardID)") as UIViewController
        self.window?.makeKeyAndVisible()
    
        if storyboardID == "tabBarVC" {
    
            self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
            self.window?.rootViewController = initialViewController
    
        } else {
    
            let navController = UINavigationController(rootViewController: initialViewController)
            self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
            self.window?.rootViewController = navController
    
        } 
    }
    

    【讨论】:

      【解决方案2】:

      检查几点:

      1) 也许你关于导航栏的设置是中性的(右侧的顶部栏下拉菜单)

      2) 如果第 1 步不起作用,请尝试将 navigationItem 手动插入到您的 viewController 中:

      【讨论】:

        【解决方案3】:

        首先,如果你使用的是UITabBarController,你应该直接初始化它的属性viewControllers
        其次,你不应该把所有的控制器都向下转换为它的基本类型。
        第三,你可能会使用这样的方案:Navigation(always root) - Initial Controller,如果没有登录则推送Login View controller

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-12-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-09-18
          • 1970-01-01
          相关资源
          最近更新 更多