• iOS开发解决:iOS8.1中UIBarButtonItem的setTitleTextAttributes对Disabled颜色设置无效问题


    (1)情景:在iOS8.1中,我们通常会利用如下语句,设置全局的导航条按钮item的主题

    UIBarButtonItem *item=[UIBarButtonItem appearance];
    NSMutableDictionary *textAttrs=[NSMutableDictionary dictionary];
    textAttrs[NSForegroundColorAttributeName]=[UIColor orangeColor];
    [item setTitleTextAttributes:textAttrs forState:UIControlStateNormal];
    [item setTitleTextAttributes:textAttrs forState:UIControlStateHighlighted];
        
    NSMutableDictionary *dTextAttrs=[NSMutableDictionary dictionaryWithDictionary:textAttrs];
    dTextAttrs[NSForegroundColorAttributeName]=[UIColor grayColor];
    [item setTitleTextAttributes:dTextAttrs forState:UIControlStateDisabled];


    (2)问题是,我们在上面明明设置了item各种状态下的属性(normal,highlighted和disabled),但是当我们在某一个控制器中添加了一个item时,并且设置为disabled状态时,却发现不起作用。 

    -(void)setupNavBar{
        self.navigationItem.rightBarButtonItem=[[UIBarButtonItem alloc]initWithTitle:@"发送" style:UIBarButtonItemStyleDone target:self action:@selector(send)];
        self.navigationItem.rightBarButtonItem.enabled=NO;
    }


    (3)解决方案 

    将上面的设置为disabled的语句放置在viewWillAppear中。

    -(void)viewWillAppear:(BOOL)animated{
        [super viewWillAppear:animated];
        //如果把下面这一句写在ViewDidLoad中,disabled的item颜色没有效果
        self.navigationItem.rightBarButtonItem.enabled=NO;
    }


    (4)至于为什么会是这样?说实话,我也不是很清楚,之前以为调用顺序的原因(测试顺序正常),后来觉得是viewDidLoad中enabled未赋值(但测试是0,有赋值)。有明白的还请指教。暂且认为是iOS8.1的一个bug吧。在iOS7.1中测试是正常的。

  • 相关阅读:
    猎户、双子、英仙
    第二卦,还叫我保持现状?
    昨晚的第三卦,就快万劫不复了
    明天要出去办事,看看情况
    luogu P3939 数颜色 |vector
    luogu P2701 [USACO5.3]巨大的牛棚Big Barn |动态规划
    luogu P2345 奶牛集会 |排序+树状数组
    luogu P4943 密室 |最短路
    luogu P4343 [SHOI2015]自动刷题机 |二分答案
    luogu P3110 [USACO14DEC]驮运Piggy Back |最短路
  • 原文地址:https://www.cnblogs.com/tate-zwt/p/4506388.html
Copyright © 2020-2023  润新知