如果导航栏的颜色在不同的视图控制器之间发生变化,如何更改后退按钮的颜色?

时间:2015-09-24 11:54:21

标签: ios iphone uinavigationbar swift2 xcode7

我为不同的视图控制器设置了不同的条纹色调。某些View Controllers的条形色调要求标题文本颜色为白色,而其他View Controllers的条形色调要求它为黑色。现在我用于带白色导航栏的视图控制器的代码(在viewWillAppear方法中调用)是:

    self.navigationController?.navigationBar.barTintColor = UIColor.whiteColor()
    self.navigationController?.navigationBar.tintColor = UIColor.blackColor()
    self.navigationController?.navigationBar.titleTextAttributes = [ NSFontAttributeName: UIFont(name: "someFont", size: 20)!,  NSForegroundColorAttributeName: UIColor.blackColor()]

    UIBarButtonItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.blackColor(), NSFontAttributeName: UIFont(name: "someFont", size: 17)!], forState: .Normal)

我用于较暗导航栏的代码(在viewWillAppear方法中调用)是:

    self.navigationController?.navigationBar.barTintColor = UIColor.blackColor()
    self.navigationController?.navigationBar.tintColor = UIColor.whiteColor()
    self.navigationController?.navigationBar.titleTextAttributes = [ NSFontAttributeName: UIFont(name: "someFont", size: 20)!,  NSForegroundColorAttributeName: UIColor.whiteColor()]

     UIBarButtonItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.whiteColor(), NSFontAttributeName: UIFont(name: "someFont", size: 17)!], forState: UIControlState.Normal)

现在问题是,我的前两个视图控制器有白色导航栏,而我的第三个视图控制器有一个更暗导航栏。

从第一个视图控制器移动到第二个视图控制器,后退按钮正常显示,并且为黑色。从第二视图控制器移动到第三视图控制器后,后退按钮通常再次出现,并且是白色的。

但是在我按下第三个视图控制器上的后退按钮并进入第二个视图控制器后,后退按钮仍然是白色且难以辨认(我不想要)。只有当我点击它时它才会变黑;在点击左上角之前你看不到它。我怎么把它变黑?

我试过在viewDidLoad,viewDidAppear和viewWillAppear函数中调用这些方法,但它只是没有解决问题。

我需要帮助解决这个恼人的故障。 感谢。

1 个答案:

答案 0 :(得分:0)

只需直接设置所有内容而无需外观代理。外观代理设置整个应用程序的值,应该在应用程序运行的早期阶段配置它。最好的位置是application:didFinishLaunchingWithOptions: AppDelegatefunc application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { configureAppearance() return true } func configureAppearance() { // Configure for all UIBarButtonItems UIBarButtonItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.whiteColor(), NSFontAttributeName: UIFont(name: "someFont", size: 17)!], forState: .Normal) // Configure for your view controller(s) where black button has to be UIBarButtonItem.appearanceWhenContainedInInstancesOfClasses([YourViewControllerWithBlackColorBtn.self]).setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.blackColor(), NSFontAttributeName: UIFont(name: "someFont", size: 17)!], forState: .Normal) } 。 你可以这样做:

profileJson = dicData[@"profile"][0];

cell.userName.text = [[profileJson objectForKey:@"First_Name"] objectAtIndex:indexPath.row];