背景
在項目中的一個搜索頁面,導航欄是 UISearchBar,搜索頁和結果頁都在當前 Controller 中顯示。
操作流程
- 輸入文字點擊 Search 按鈕,或點擊頁面中的搜索歷史
- 展示搜索結果,UISearchBar 失去第一響應者
- 點擊 UISearchBar 的 Cancel 按鈕
- 彈出鍵盤
- 再次點擊 UISearchBar 的 Cancel 按鈕
- 調用 delegate 方法:
- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar
在這里,delegate 方法中需要 pop 頁面,而在展示搜索結果后,也就是 UISearchBar 失去第一響應者后,需要點擊兩次才能調用方法,不符合需求。
原因
因為在此時,Cancel 按鈕的 enabled 屬性被設置為 NO,如果想保持可以點擊,需要在搜索框失去焦點的地方設置其 enabled 為 YES。
解決辦法
// 設置取消按鈕為可用狀態(tài)
UIButton *cancelBtn = [self.searchBar valueForKey:@"cancelButton"];
cancelBtn.enabled = YES;
將這兩行代碼放置 UISearchBar 失去第一響應者之后即可。