iOS 5でより多くの外観コントロールを使用して、UITabBarItemのテキストの色をどのように変更しますか?デフォルトの白から他の色へ?
編集:実用的なソリューション
[[UITabBarItem appearance] setTitleTextAttributes:
[NSDictionary dictionaryWithObjectsAndKeys:
[UIColor blackColor], UITextAttributeTextColor,
[UIColor whiteColor], UITextAttributeTextShadowColor,
[NSValue valueWithUIOffset:UIOffsetMake(0, 1)], UITextAttributeTextShadowOffset,
[UIFont fontWithName:@"Rok" size:0.0], UITextAttributeFont,
nil]
forState:UIControlStateNormal];
これ意味?これはiOS5.0以降でのみ機能することに注意してください。
if ([self.tabBarItem respondsToSelector:@selector(setTitleTextAttributes:)]) {
NSLog(@"*** Support method(iOS 5): setTitleTextAttributes:");
[self.tabBarItem setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
[UIFont fontWithName:@"AmericanTypewriter" size:20.0f], UITextAttributeFont,
[UIColor blackColor], UITextAttributeTextColor,
[UIColor grayColor], UITextAttributeTextShadowColor,
[NSValue valueWithUIOffset:UIOffsetMake(0.0f, 1.0f)], UITextAttributeTextShadowOffset,
nil]];
}
外観のカスタマイズに関するAppleのドキュメント:
IOS v5.0以降では、UIBarItemで宣言された外観セレクターを使用してアイテムラベルのテキスト属性を設定することにより、タブバーの外観をカスタマイズできます。 「外観のカスタマイズ」にリストされている方法を使用することもできます。外観プロキシ(たとえば、[UITabBarItem外観])を使用するか、単一のタブバーだけを使用して、すべてのセグメント化されたコントロールの外観をカスタマイズできます。 「完成した選択画像の管理」にリストされている方法を使用して、完成した選択画像と未選択画像を提供することもできます。ただし、これらのメソッドはUIAppearanceプロキシAPIには参加しません(UIAppearanceを参照)。 UIKitは、完成した画像に自動処理を提供します。良い結果を得るには、setFinishedSelectedImage:withFinishedUnselectedImage:を使用して、一致するペアで完成した選択画像と非選択画像を提供する必要があります。
編集:これは、UIAppearanceシステムとNSDictionaryリテラルを使用した別の例です構文:
[[UITabBarItem appearance] setTitleTextAttributes:@{
UITextAttributeFont : [UIFont fontWithName:@"AmericanTypewriter" size:20.0f],
UITextAttributeTextColor : [UIColor blackColor],
UITextAttributeTextShadowColor : [UIColor grayColor],
UITextAttributeTextShadowOffset : [NSValue valueWithUIOffset:UIOffsetMake(0.0f, 1.0f)]}];
編集(by @JeremyWiebe):iOS 6以降、辞書キーはOS Xが使用するものと同じになるように変更されました:
NSShadow *shadow = [[NSShadow alloc] init];
shadow.shadowColor = [UIColor grayColor];
shadow.shadowOffset = CGSizeMake(0, 1.0);
[[UITabBarItem appearance] setTitleTextAttributes:@{
NSFontAttributeName : [UIFont fontWithName:@"AmericanTypewriter" size:20.0f],
NSForegroundColorAttributeName : [UIColor blackColor],
NSShadowAttributeName : shadow }];
[[UITabBarItem appearance] setTitleTextAttributes:@{
UITextAttributeFont : [UIFont fontWithName:@"HelveticaNeue-Bold" size:10.0f],
UITextAttributeTextColor : [UIColor colorWithRed:0/255.0 green:48/255.0 blue:92/255.0 alpha:1.0],}
forState:UIControlStateNormal];
[[UITabBarItem appearance] setTitleTextAttributes:@{
UITextAttributeFont : [UIFont fontWithName:@"HelveticaNeue-Bold" size:10.0f],
UITextAttributeTextColor : [UIColor colorWithRed:0/255.0 green:138/255.0 blue:196/255.0 alpha:1.0],}
forState:UIControlStateSelected];
UITextAttributeFont、UITextAttributeTextColorなどはiOS 7.0では非推奨です。
使用する必要があります:
NSFontAttributeName, NSParagraphStyleAttributeName, NSForegroundColorAttributeName, NSBackgroundColorAttributeName, NSLigatureAttributeName, NSKernAttributeName, NSStrikethroughStyleAttributeName, NSUnderlineStyleAttributeName, NSStrokeColorAttributeName, NSStrokeWidthAttributeName, NSShadowAttributeName and NSVerticalGlyphFormAttributeName
特にiOS 7の場合、UITextAttributeTextColorの代わりにNSForegroundColorAttributeNameを使用してみてください
IOS 7.0以降の実用的なソリューション:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[[UITabBarItem appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
[UIColor redColor], NSForegroundColorAttributeName,
nil] forState:UIControlStateNormal];
[[UITabBarItem appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
[UIColor whiteColor], NSForegroundColorAttributeName,
nil] forState:UIControlStateSelected];
}
コメントを追加するのに十分な評判ポイントがないので、ここで別の回答を追加します。
私は同じ問題を抱えて過去1時間を検索し、コードがメソッドviewWillAppearに入れられなかったことが原因であることにようやく気づきました。これは私がobjective-cから始めたばかりなので常識であるかどうかはわかりませんが、viewDidLoad内では同じコードが機能しなかったため、これは回答に対する別の重要な情報であると考えました。
this post によると、このコードはviewWillAppearメソッドに配置された場合にのみ機能します。