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;
}
}
如此便能实现取消按钮一直是可点击的。且“取消”按钮的文字颜色一直是可点击性的蓝色。
网友评论
[searchBar resignFirstResponder]; //searchBar失去焦点
UIButton *cancelBtn = [searchBar valueForKey:@"cancelButton"]; //首先取出cancelBtn
cancelBtn.enabled = YES; //把enabled设置为yes
}
可以试试这个方法