美文网首页
设置导航栏按钮时遇到的问题

设置导航栏按钮时遇到的问题

作者: 芙箩娅 | 来源:发表于2016-04-24 17:02 被阅读258次

一点小小的疑惑 ,一直在纠结这个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)


此时左右两边都是符合设定需求的状态.png

但modal出的导航栏左右两侧都为默认的normal样式 ,"发送"这个按钮现在显示为橙色,但是确定是不可用状态。


此时导航条右边的按钮是disabled状态.png

我曾经想过是不是因为modal出的界面是不是不受上面initialize方法的约束,但瞬间又被我自己推翻了,因为左边的"取消"按钮分明就是被渲染过的橘黄色。

经过几次测试验证,所有modal出的控制器都有这个毛病,肉眼看上去是可用状态,但是就是不显示 UIControlStateDisabled 状态时应有的灰色样式。

尝试了设置按钮disabled 属性之类的方法,不好使
最后用了一个笨方法解决的

// textAttrs[NSForegroundColorAttributeName] = [UIColor orangeColor]; // 前景颜色

注释掉这一句 ,按钮的普通状态title颜色变成了系统默认的蓝色。在监听到按钮由不可用 -> 可用时 再通过修改title颜色来达到需要的效果

self.navigationItem.rightBarButtonItem.enabled = YES;
self.navigationItem.rightBarButtonItem.tintColor = [UIColor orangeColor];

感觉很蠢... ... 但是因为当前项目中modal出来的界面并不多,这样的代码页就写个一两次,好歹是达到效果了,虽然真的很蠢,但勉强能用... ...
先凑合用吧……

相关文章

网友评论

      本文标题:设置导航栏按钮时遇到的问题

      本文链接:https://www.haomeiwen.com/subject/oiefrttx.html