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 失去第一响应者之后即可。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容