[_window setRootViewController]之后UITabBar setTintColor无法正常工作

时间:2014-01-30 15:18:23

标签: ios iphone objective-c uinavigationcontroller uitabbarcontroller

我有一个奇怪的问题。每当我的应用程序启动时,我都会在AppDelegate中执行以下操作:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.
    [[UINavigationBar appearance] setBarTintColor:[UIColor whiteColor]];
    [[UINavigationBar appearance] setTintColor:[UIColor mainLightBlue]];
    [[UITabBar appearance] setTintColor:[UIColor mainLightBlue]];

    [IJContext setDefaultContext:[[IJContext alloc] init]];
    RKLogConfigureFromEnvironment();
    return YES;
}

然后,如果我的用户成功登录,我在AppDelegate中执行以下操作:

-(void)presentNewsFeed
{
    RKLogConfigureByName("RestKit/Network", RKLogLevelDebug);
    UIViewController *newTopViewController = [[UIStoryboard storyboardWithName:@"MainiPadStoryboard" bundle:nil] instantiateViewControllerWithIdentifier:@"GlobalInitialSliding"];
    [_window setRootViewController:newTopViewController];
}

此时,setTintColor工作正常。现在,每当用户退出时,我都会打电话:

- (void)presentLoginScreen
{
    UIViewController *newTopViewController = [[UIStoryboard storyboardWithName:@"MainiPadStoryboard" bundle:nil] instantiateViewControllerWithIdentifier:@"Login"];
    [_window setRootViewController:newTopViewController];
}

这又位于AppDelegate中。如果日志重新登录,我再次拨打presentNewsFeed。但是,在第二次,setTintColor不再起作用,并且只要选中它们,我的所有选项卡实际上都没有tintColor。所以我的用户实际上无法知道选择了哪个标签。关于为什么的任何想法?

4 个答案:

答案 0 :(得分:2)

我在tintColor中有viewController的另一个声明,它正在弄乱appDelegate中的那个!

由于

答案 1 :(得分:1)

从你的问题: 然后,如果我的用户成功登录,我会在AppDelegate

中执行以下操作
-(void)presentNewsFeed           
{ ... }          

这意味着您的第一个屏幕是登录屏幕那么为什么不将setRootViewController设置为 yourLoginScreenViewController ?在您的代码中,您还会收到Applications are expected to have a root view controller at the end of application launch之类的警告?因为当你启动应用程序时,你的窗口没有 rootViewController 所以。

如果您按照我的建议,那么只要您 LoggedOut ,就可以轻松获得 LoginScreen ,使用以下代码:

[self.navigationController popToRootViewControllerAnimated:YES];

因为您RootViewController登录屏幕,所以您可以直接到达RootViewController,也不用担心重新创建RootViewController

答案 2 :(得分:1)

尝试使用此代码为tabbar设置扁平红色

[[UITabBar appearance] setBackgroundColor:[UIColor redColor]];

用于设置图像试试这个

 UIImage *tabBackground = [[UIImage imageNamed:@"tab_bg"]
                          resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
[[UITabBar appearance] setBackgroundImage:tabBackground];
[[UITabBar appearance] setSelectionIndicatorImage:
[UIImage imageNamed:@"tab_select_indicator"]];

答案 3 :(得分:0)

您可以设置图片(1px for width and 49 px for height)并保存,例如:tabBg.png,然后替换:

[[UITabBar appearance] setTintColor:[UIColor mainLightBlue]];

由此:

UIImage *tabBarBackground = [UIImage imageNamed:@"tabBg.png"];
[[UITabBar appearance] setBackgroundImage:tabBarBackground];

我希望这会对你有所帮助。