美文网首页iOS开发杂货铺iOS DeveloperiOS开发技术分享
UISearchBar失去第一响应后,“取消”按钮不可点击的烦恼

UISearchBar失去第一响应后,“取消”按钮不可点击的烦恼

作者: Qiu_W | 来源:发表于2016-03-14 16:59 被阅读3581次

    UISearchBar获得焦点和不获得焦点的情况下,UISearchBar上的取消按钮的样式和可用属性也是不一样的。

    图1 UISearchBar获得焦点 图2 UISearchBar失去焦点

    但是最近的项目要求,取消按钮一直可以点击,本人又不想为了这么一个小需求再去自定义个一个UISearchBar。通过遍历UISearchBar的子视图,发现“取消”按钮在UISearchBar失去焦点之后,其enabled属性为no。所以找到了原因便找到了解决办法。所以便通过以下方法来改变取消按钮的样式和可用属性。

    在SeaarchBar的代理方法中调用searchBarResignAndChangeUI方法,对取消按钮做改变

    //1、键盘搜索按钮点击

    - (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar{

    [self searchBarResignAndChangeUI];

    //2、UISearchBar结束编辑

    - (void)searchBarTextDidEndEditing:(UISearchBar *)searchBar{

    [self searchBarResignAndChangeUI];

    }

    searchBarResignAndChangeUI方法的实现如下:

    - (void)searchBarResignAndChangeUI{

    [_searchBar resignFirstResponder];//失去第一响应

    [self changeSearchBarCancelBtnTitleColor:_searchBar];//改变布局

    }

    #pragma mark - 遍历改变搜索框 取消按钮的文字颜色

    - (void)changeSearchBarCancelBtnTitleColor:(UIView *)view{

    if (view) {

    if ([view isKindOfClass:[UIButton class]]) {

    UIButton *getBtn = (UIButton *)view;

    [getBtn setEnabled:YES];//设置可用

    [getBtn setUserInteractionEnabled:YES];

    //设置取消按钮字体的颜色“#0374f2” 

    [getBtn setTitleColor:[UIColor colorWithHexString:@"#0374f2"] forState:UIControlStateReserved];

    [getBtn setTitleColor:[UIColor colorWithHexString:@"#0374f2"] forState:UIControlStateDisabled];

    return;

    }else{

    for (UIView *subView in view.subviews) {

    [self changeSearchBarCancelBtnTitleColor:subView];

    }

    }

    }else{

    return;

    }

    }

    如此便能实现取消按钮一直是可点击的。且“取消”按钮的文字颜色一直是可点击性的蓝色。

    相关文章

      网友评论

      • cdbc22419bfc:请问,我没点击取消按钮就直接返回,会黑屏的,请问这怎么解决啊
        Qiu_W:不知道你那边是什么情况,可以说的详细一点吗
      • 177e2f7f8f57:你的这个界面 是如何做到 返回按钮存在 取消按钮也存在的 求回复 :flushed:
        Qiu_W:设置self.navigationItem.leftBarButtonItems属性
      • fb7bb2336a11:-(void)searchBarSearchButtonClicked:(UISearchBar *)searchBar {
        [searchBar resignFirstResponder]; //searchBar失去焦点
        UIButton *cancelBtn = [searchBar valueForKey:@"cancelButton"]; //首先取出cancelBtn
        cancelBtn.enabled = YES; //把enabled设置为yes
        }

        可以试试这个方法 :smiley:
        少年_如他:我用这个方法没有效果,可能是什么原因呢?
        Qiu_W:@ShawnSun UIButton *cancelBtn = [searchBar valueForKey:@"cancelButton"]; //首先取出cancelBtn 嗯 这个很简便 挺好的
      • 郭荣伟:你这个写的太好了,完美的解决了我的问题,赞
        Qiu_W:@郭荣伟 谢谢支持 :heart:

      本文标题:UISearchBar失去第一响应后,“取消”按钮不可点击的烦恼

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