UINavigationBar をUIAppearanceでスタイリングしています。すべての戻るボタンに灰色のテキストを表示し、すべての rightBarButtonItems に緑色のテキストを表示します (色は仮定上のものです)。どちらのボタンもデフォルトで UIBarButtonItems であるため、UIAppearance は 2 つを区別できません。そこで、UIBarButtonItem をサブクラス化し、ActionBarButtonItem と呼ぶことにしました。この新しいサブクラスは、rightBarButtonItem が必要な場所で使用します。
rightBarButtonItem
UIBarButtonItem* done = [[ActionBarButtonItem alloc]
initWithTitle:@"Done"
style:UIBarButtonItemStyleDone
target:self
action:@selector(onDonePress)];
self.navigationItem.rightBarButtonItem = done;
[done release];
UI外観
NSDictionary* buttonStyle = [NSDictionary
dictionaryWithObjects:[NSArray
arrayWithObjects:
[UIColor grayColor],
, nil
]
forKeys:[NSArray
arrayWithObjects:
UITextAttributeTextColor,
nil
]
];
NSDictionary* actionStyle = [NSDictionary
dictionaryWithObjects:[NSArray
arrayWithObjects:
[UIColor greenColor],
nil
]
forKeys:[NSArray
arrayWithObjects:
UITextAttributeTextColor,
nil
]
];
[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationController class], nil]
setTitleTextAttributes:buttonStyle
forState:UIControlStateNormal
];
[[ActionBarButtonItem appearanceWhenContainedIn:[UINavigationController class], nil]
setTitleTextAttributes:actionStyle
forState:UIControlStateNormal
];
理論的には、灰色のテキストはすべての UIBarButtonItems に適用されます。次に、ActionBarButtonItems のみの灰色のテキストを緑色のテキストでオーバーライドします。最終結果は期待どおりではありません。理由は不明ですが、すべてのUIBarButtonItem に緑色のテキストが表示されます。なんで?