从代码中呈现 tabBarController 会删除导航栏按钮和标题
Presenting a tabBarController from code removes the navigation bar buttons and title
我正在尝试在应用程序启动时使用代码(不是故事板转场)呈现 tabBarController。如果用户已注册,应用程序应在 tabBarVC 上打开,如果用户需要 signup/login,则显示登录 VC。我在 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 并使导航栏正确显示?
检查几点:
1) 也许您对导航栏的设置是中性的(右侧的顶部栏下拉菜单)
2) 如果第 1 步不起作用,请尝试将 navigationItem 手动插入 viewController:
首先,如果您使用的是 UITabBarController,您应该直接初始化它的 属性 viewControllers
。
其次,您不应该将所有控制器向下转换为它的基类型。
第三,可能你可以使用这样的方案:Navigation(always root)
- Initial Controller
,如果没有登录你推送Login View controller
我试图用 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
}
}
我正在尝试在应用程序启动时使用代码(不是故事板转场)呈现 tabBarController。如果用户已注册,应用程序应在 tabBarVC 上打开,如果用户需要 signup/login,则显示登录 VC。我在 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 并使导航栏正确显示?
检查几点:
1) 也许您对导航栏的设置是中性的(右侧的顶部栏下拉菜单)
2) 如果第 1 步不起作用,请尝试将 navigationItem 手动插入 viewController:
首先,如果您使用的是 UITabBarController,您应该直接初始化它的 属性 viewControllers
。
其次,您不应该将所有控制器向下转换为它的基类型。
第三,可能你可以使用这样的方案:Navigation(always root)
- Initial Controller
,如果没有登录你推送Login View controller
我试图用 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
}
}