我正在尝试更改UITabBar标题的颜色。
我在每个视图控制器'viewDidLoad
中都有这段代码:
[self.tabBarItem setTitleTextAttributes:@{NSForegroundColorAttributeName :
[UIColor whiteColor]} forState:UIControlStateSelected];
[self.tabBarItem setTitleTextAttributes:@{NSForegroundColorAttributeName :
[UIColor whiteColor]} forState:UIControlStateNormal];
仅在视图加载后颜色从默认值更改时,这只有一半 - 因此,在标签栏项目被轻敲至少一次之后。这不是我正在寻找的行为,我想在应用程序启动后立即设置颜色。
将代码置于视图控制器“initWithNibName:
中根本不起作用。
我有什么方法可以从应用代表的tabBarItem
处理didFinishLaunchingWithOptions
?
更新
我在下面标记为正确的答案有效,但我也找到了另一种方法,如果你想解决个别UITabBarItem
问题,这种方法会更好。从标签栏控制器中,通过从Interface Builder创建出口或以编程方式将标签栏分配给指针后,您可以像这样查找单个tabBarItem
(对于{{指向的UITabBar) 1}}):
tabBar
等...
然后你可以做像
这样的事情UITabBarItem *tab1 = [self.tabBar.items objectAtIndex: 0];
UITabBarItem *tab2 = [self.tabBar.items objectAtIndex: 1];
以及各种其他东西。
答案 0 :(得分:1)
了解UIAppearance。 https://developer.apple.com/library/iOS/documentation/UIKit/Reference/UIAppearance_Protocol/Reference/Reference.html
创建一个实用程序类,以便为标签栏和导航栏显示所需的外观。然后从App Delegate的didFinishLaunchingWithOptions中调用该类。这是一个让你入门的例子:
+ (void) setUpTabBarAppearance
{
[[UITabBarItem appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIFont fontWithName:@"Your Font" size:15], UITextAttributeFont, [UIColor whiteColor], UITextAttributeTextColor, [UIColor clearColor], UITextAttributeTextShadowColor, nil] forState:UIControlStateNormal];
[[UITabBarItem appearance] setTitleTextAttributes:@{ UITextAttributeTextColor : [UIColor greenColor] }forState:UIControlStateSelected];
[[UITabBar appearance] setSelectedImageTintColor:[UIColor greenColor]];
}
然后从您的app委托的didFinishLaunchingWithOptions中调用:[utility setUpTabBarAppearance]; 此外,通过这种方式,您只需修改一次TabBar的外观,而不是每一个类都修改。
答案 1 :(得分:0)
我的AppDelegate中有以下内容:didFinishLaunchingWithOptions:
[[UITabBar appearance] setTintColor:[UIColor yellowColor]];
[[UITabBar appearance] setBarTintColor:[UIColor darkGrayColor]];
[[UITabBarItem appearance] setTitleTextAttributes:@{NSFontAttributeName:[UIFont boldSystemFontOfSize:10.0f], NSForegroundColorAttributeName:[UIColor blackColor]} forState:UIControlStateSelected];