更改选项卡栏的导航控制器的根控制器

时间:2016-07-08 10:05:36

标签: ios xcode swift storyboard

我的应用中有一个标签栏,其中一个按钮是"个人资料"如果用户未经授权,则应显示一个VC profile image

所以......事情有效,但不正确。看起来我搞砸了一些根控制器。有时我不能弹出vc或更改导航栏标题的颜色。

我在

中创建了一个包含该代码的自定义导航控制器
if NSUserDefaults.standardUserDefaults().objectForKey("userId") != nil {
    let newController: UserViewController = self.storyboard?.instantiateViewControllerWithIdentifier("userViewController") as! UserViewController
    self.setViewControllers([newController], animated: false)
} else {
    let newController: LoginViewController = self.storyboard?.instantiateViewControllerWithIdentifier("loginViewController") as! LoginViewController
    self.setViewControllers([newController], animated: false) 
}

有没有办法正确实施?

2 个答案:

答案 0 :(得分:2)

您是否尝试将UINavigationController作为另一个UINavigationController的根目录?因为它被禁止而且效果不佳。

答案 1 :(得分:1)

您正在尝试实例化导航控制器 - 正如@PierreMB所提到的那样,它不会起作用。您应该创建两个带有故事板ID的常规视图控制器" userViewController"和" loginViewController",并实例化它们。

创建一个UINavigationController子类,并将此代码(您编写,略微修改)放入其viewWillAppear()方法中(作为奖励,您可以免费传递&#39;动画&#39;参数):< / p>

if NSUserDefaults.standardUserDefaults().objectForKey("userId") != nil {
    let newController = self.storyboard?.instantiateViewControllerWithIdentifier("userViewController") // drop the 'as! UINavigationController'
    self.setViewControllers([newController], animated: animated)
} else {
    let newController = self.storyboard?.instantiateViewControllerWithIdentifier("loginViewController") // drop the 'as! UINavigationController'
    self.setViewControllers([newController], animated: animated) 
}

函数instantiateViewControllerWithIdentifier()默认返回一个UIViewController,这是你真正想要显示的内容。