[right setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor redColor]} forState:UIControlStateDisabled];
这样设置了 Disabled 时候的颜色
但是
self.navigationItem.rightBarButtonItem.enabled=NO 后
依然是灰色的
高洛峰2017-04-17 14:43:08
應該使用
javascript
[[UIBarButtonItem appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor redColor]} forState:UIControlStateDisabled];
參考UIBarItem.h裡面的
javascript
/* You may specify the font, text color, and shadow properties for the title in the text attributes dictionary, using the keys found in NSAttributedString.h. */ - (void)setTitleTextAttributes:(NSDictionary *)attributes forState:(UIControlState)state NS_AVAILABLE_IOS(5_0) UI_APPEARANCE_SELECTOR; - (NSDictionary *)titleTextAttributesForState:(UIControlState)state NS_AVAILABLE_IOS(5_0) UI_APPEARANCE_SELECTOR;
這兩個方法是Appearance protocol的方法。
應該是呼叫方法的時間點有問題,這個是我的demo程式碼片段
javascript
- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { [self setNaviagtionItem]; } return self; } - (instancetype)init { self = [super init]; if (self) { [self setNaviagtionItem]; } return self; } - (id)initWithCoder:(NSCoder *)aDecoder { self = [super initWithCoder:aDecoder]; if (self) { [self setNaviagtionItem]; } return self; } - (void)setNaviagtionItem { UIBarButtonItem *leftItem = [[UIBarButtonItem alloc] initWithTitle:@"bb" style:UIBarButtonItemStyleDone target:self action:nil]; self.navigationItem.leftBarButtonItem = leftItem; NSDictionary* textAttributes = [NSDictionary dictionaryWithObject: [UIColor blackColor] forKey: NSForegroundColorAttributeName]; [[UIBarButtonItem appearance] setTitleTextAttributes: textAttributes forState: UIControlStateNormal]; NSDictionary* textAttributes1 = [NSDictionary dictionaryWithObject: [UIColor brownColor] forKey: NSForegroundColorAttributeName]; [[UIBarButtonItem appearance] setTitleTextAttributes: textAttributes1 forState: UIControlStateDisabled]; NSDictionary* textAttributes2 = [NSDictionary dictionaryWithObject: [UIColor yellowColor] forKey: NSForegroundColorAttributeName]; [[UIBarButtonItem appearance] setTitleTextAttributes: textAttributes2 forState: UIControlStateSelected]; } - (void)viewDidLoad { [super viewDidLoad]; [self setNaviagtionItem]; self.navigationItem.leftBarButtonItem.enabled = NO; }