iOS开发杂货铺iOS DeveloperiOS开发技术分享

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

2016-03-14  本文已影响3581人  Qiu_W

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;

}

}

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

上一篇下一篇

猜你喜欢

热点阅读