ios searchBar

苹果自带的UISearchBar还是蛮好用的,但是在使用过程中也遇到一些坑,比如如何找到searchBar右侧的取消button,以及第一次点击的时候会执行UISearchBar的代理方法:searchBarTextDidBeginEditing 的问题。

首先如何获取cancelButton并且进行自定义呢?

for (UIView *view in [[_searchBar.subviews lastObject] subviews]) {

if ([view isKindOfClass:[UIButton class]]) {

UIButton *cancelBtn = (UIButton *)view;

cancelBtn.enabled = YES;

[cancelBtn setTitle:@"取消" forState:UIControlStateNormal];

[cancelBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];

[cancelBtn addTarget:self action:@selector(cancelButtonClicked:) forControlEvents:UIControlEventTouchUpInside];

}

}

上面这是复杂一点的方式,下面用更简单的方式获取,那就是利用kvo原理:

UIButton *cancelBtn = [_searchBar valueForKeyPath:@"cancelButton"];

cancelBtn.enabled = YES;

[cancelBtn setTitle:@"取消" forState:UIControlStateNormal];

[cancelBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];

[cancelBtn addTarget:self action:@selector(cancelButtonClicked:) forControlEvents:UIControlEventTouchUpInside];

大家可能注意到,其中有一行代码 cancelBtn.enabled = YES; 为什么要写这句代码呢?是因为searchBar加载出来以后右侧的取消按钮是默认enabled = NO,所以才会出现点击的时候执行searchBarTextDidBeginEditing方法。注意一点,在搜索完成,searchBar失去焦点的地方,也需要获取到cancelBtn并且设置 cancelBtn.enabled = YES;

比如在点击键盘上的搜索按钮:

//键盘上搜索按钮被点击

- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar

{

[searchBar resignFirstResponder];

UIButton *cancelBtn = [searchBar valueForKeyPath:@"cancelButton"]; //首先取出cancelBtn

cancelBtn.enabled = YES;

}

这样点击取消按钮就会直接退出搜索页面,而不是执行searchBarTextDidBeginEditing方法。

希望以上内容对你有帮助!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • #pragma - mark- 开始的时候 /* 开始 */ - (BOOL)searchBarShouldBeg...
    赵永洪阅读 1,185评论 0 6
  • iOS开发系列--网络开发 概览 大部分应用程序都或多或少会牵扯到网络开发,例如说新浪微博、微信等,这些应用本身可...
    lichengjin阅读 3,721评论 2 7
  • 通过自己开发以及借鉴的别人的经验,总结一下一些开发中经常用到的技巧知识点,也算是做个小笔记吧。 1、控件的局部圆角...
    男儿心阅读 849评论 0 1
  • 只觉得可笑,便默默地转身离开。 总觉得,再怎样善于隐藏的人,总会在某些地方抒发出对世事的情怀。总认为,读其过去聊其...
    胖先生胖阅读 195评论 0 0
  • 说起曾经的梦想,不经想起了很小的时候,那时候梦想自己变成动画片中的花仙子,可爱、漂亮、人见人爱……又想到初中时候的...
    子非鱼1818阅读 452评论 0 0