为什么无法设置 UIBarButtonItem Disabled状态的颜色
[right setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor redColor]} forState:UIControlStateDisabled];
这样设置了 Disabled 时候的颜色
但是
self.navigationItem.rightBarButtonItem.enabled=NO 后
依然是灰色的
应该使用
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. */ - voidsetTitleTextAttributes:NSDictionary *attributes forState:UIControlStatestate NS_AVAILABLE_IOS5_0 UI_APPEARANCE_SELECTOR; - NSDictionary *titleTextAttributesForState:UIControlStatestate NS_AVAILABLE_IOS5_0 UI_APPEARANCE_SELECTOR;
这两个方法是Appearance protocol的方法。
应该是调用方法的时间点上有问题,这个是我的demo代码片段
javascript
- instancetypeinitWithNibName:NSString *nibNameOrNil bundle:NSBundle *nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if self { [self setNaviagtionItem]; } return self; } - instancetypeinit { self = [super init]; if self { [self setNaviagtionItem]; } return self; } - idinitWithCoder:NSCoder *aDecoder { self = [super initWithCoder:aDecoder]; if self { [self setNaviagtionItem]; } return self; } - voidsetNaviagtionItem { 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]; } - voidviewDidLoad { [super viewDidLoad]; [self setNaviagtionItem]; self.navigationItem.leftBarButtonItem.enabled = NO; }
发表评论