UISearchBar獲得焦點和不獲得焦點的情況下,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;
}
}
如此便能實現取消按鈕一直是可點擊的。且“取消”按鈕的文字顏色一直是可點擊性的藍色。