一点小小的疑惑 ,一直在纠结这个bug,
设置工程中所有BarButtonItem主题样式
+ (void)initialize {
// 设置整个项目所有的 BarButtonItem 的主题样式
UIBarButtonItem *item = [UIBarButtonItem appearance];
// 设置 item 普通状态
NSMutableDictionary *textAttrs = [NSMutableDictionary dictionary];
textAttrs[NSForegroundColorAttributeName] = [UIColor orangeColor]; // 前景颜色
textAttrs[NSFontAttributeName] =[UIFont systemFontOfSize:15];
[item setTitleTextAttributes:textAttrs forState:UIControlStateNormal];
// 设置 item 不可用状态 (灰色 禁止与用户进行交互)
NSMutableDictionary *disableTextAttrs = [NSMutableDictionary dictionary];
disableTextAttrs[NSForegroundColorAttributeName] = [UIColor colorWithRed:180/255.0 green:180/255.0 blue:180/255.0 alpha:0.7];
disableTextAttrs[NSFontAttributeName] =[UIFont systemFontOfSize:15];
[item setTitleTextAttributes:disableTextAttrs forState:UIControlStateDisabled];
}
但是实际运行中出现了这样的bug
普通的push出的控制器 遵循主题样式(左侧按钮enable = YES 右侧为NO)
但modal出的导航栏左右两侧都为默认的normal样式 ,"发送"这个按钮现在显示为橙色,但是确定是不可用状态。
我曾经想过是不是因为modal出的界面是不是不受上面initialize方法的约束,但瞬间又被我自己推翻了,因为左边的"取消"按钮分明就是被渲染过的橘黄色。
经过几次测试验证,所有modal出的控制器都有这个毛病,肉眼看上去是可用状态,但是就是不显示 UIControlStateDisabled 状态时应有的灰色样式。
尝试了设置按钮disabled 属性之类的方法,不好使
最后用了一个笨方法解决的
// textAttrs[NSForegroundColorAttributeName] = [UIColor orangeColor]; // 前景颜色
注释掉这一句 ,按钮的普通状态title颜色变成了系统默认的蓝色。在监听到按钮由不可用 -> 可用时 再通过修改title颜色来达到需要的效果
self.navigationItem.rightBarButtonItem.enabled = YES;
self.navigationItem.rightBarButtonItem.tintColor = [UIColor orangeColor];
感觉很蠢... ... 但是因为当前项目中modal出来的界面并不多,这样的代码页就写个一两次,好歹是达到效果了,虽然真的很蠢,但勉强能用... ...
先凑合用吧……