UISearchBar 失去第一响应者之后的 Cancel 按钮

背景

在项目中的一个搜索页面,导航栏是 UISearchBar,搜索页和结果页都在当前 Controller 中显示。

操作流程

  • 输入文字点击 Search 按钮,或点击页面中的搜索历史
  • 展示搜索结果,UISearchBar 失去第一响应者
  • 点击 UISearchBar 的 Cancel 按钮
  • 弹出键盘
  • 再次点击 UISearchBar 的 Cancel 按钮
  • 调用 delegate 方法:
- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar

在这里,delegate 方法中需要 pop 页面,而在展示搜索结果后,也就是 UISearchBar 失去第一响应者后,需要点击两次才能调用方法,不符合需求。

原因

因为在此时,Cancel 按钮的 enabled 属性被设置为 NO,如果想保持可以点击,需要在搜索框失去焦点的地方设置其 enabled 为 YES。

解决办法

//  设置取消按钮为可用状态
UIButton *cancelBtn = [self.searchBar valueForKey:@"cancelButton"]; 
cancelBtn.enabled = YES;

将这两行代码放置 UISearchBar 失去第一响应者之后即可。

你可能感兴趣的:(UISearchBar 失去第一响应者之后的 Cancel 按钮)