美文网首页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