一般,我们用到UISearchDisplayController的时候,都是须要对一个数据源进行刷选,在UISearchDisplayController自带的tableView中展示出来,然后点击退出详情.我近期在做大众点评第三方的时候,遇到一个问题,我展示出了所有商店,想加搜索功能,可是不知道输入的搜索keyword去跟什么匹配,大众点评也并没有提供一个用来刷选的数据源接口,这样,我仅仅能自己输入keyword,不用它数据源提供刷选补全内容,而直接点击弹出键盘的搜索键,进行搜索.只是点击搜索后,UISearchDisplayController的搜索状态并不会取消,这并非我想要了效果,调试了非常久,终于还是攻克了.

#pragma mark - 点击搜索,能够取消搜索状态
#pragma mark UISearchDisplayDelegate
- (void)searchDisplayControllerDidBeginSearch:(UISearchDisplayController *)controller
{
for (UIView *view in controller.searchBar.subviews)
{
NSLog(@"%d__|---%@",__LINE__,view);
for (UIView *subView in view.subviews)
{
NSLog(@"%d__|!!!%@",__LINE__,subView);
// 获取"取消"button
if([subView isKindOfClass:[UIButton class]])
{
UIButton *cancelButton = (UIButton *)subView;
// 获取点击"取消"button的响应事件(actionsForTarget 这种方法返回的是一个数组)
self.cancelSearchSELString = [[cancelButton actionsForTarget:controller.searchBar forControlEvent:UIControlEventTouchUpInside] objectAtIndex:0];
// 响应通知,运行方法直接用上面获得的响应事件方法,转换一下(这是个知识点,能够扩展下)
[[NSNotificationCenter defaultCenter] addObserver:controller.searchBar selector:NSSelectorFromString(self.cancelSearchSELString) name:@"cancelSearch" object:nil];
}
}
}
} #pragma mark UISearchBarDelegate------点击搜索button
- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar{ // 获取你想搜索的终于完整keyword(一般能够用来做搜索历史展示)
NSLog(@"%s__%d__|%@",__FUNCTION__,__LINE__,searchBar.text);
// 点击button时,公布取消搜索状态通知
[[NSNotificationCenter defaultCenter] postNotificationName:@"cancelSearch" object:nil];
// 公布---响应---取消通知
[[NSNotificationCenter defaultCenter] removeObserver:searchBar name:@"cancelSearch" object:nil];
}

@扩展一下知识点:

能够用actionsForTarget方法,来获取针对某一特定事件目标的所有动作列表:
[java] view plaincopyprint?
NSArray* myActions = [ myControl actionForTarget:UIControlEventValueChanged ];
//  一些特别的转换
@class NSString, Protocol; FOUNDATION_EXPORT NSString *NSStringFromSelector(SEL aSelector);
FOUNDATION_EXPORT SEL NSSelectorFromString(NSString *aSelectorName); FOUNDATION_EXPORT NSString *NSStringFromClass(Class aClass);
FOUNDATION_EXPORT Class NSClassFromString(NSString *aClassName); FOUNDATION_EXPORT NSString *NSStringFromProtocol(Protocol *proto) NS_AVAILABLE(10_5, 2_0);
FOUNDATION_EXPORT Protocol *NSProtocolFromString(NSString *namestr) NS_AVAILABLE(10_5, 2_0);

点击搜索取消UISearchDisplayController的搜索状态的更多相关文章

  1. iOS--- UITableView + UISearchDisplayController - - - - -实现搜索功能

    iOS中UISearchDisplayController用于搜索,搜索栏的重要性我们就不说了,狼厂就是靠搜索起家的,现在越来越像一匹没有节操的狼,UC浏览器搜索栏现在默认自家的神马搜索,现在不管是社 ...

  2. hdu1565 用搜索代替枚举找可能状态或者轮廓线解(较优),参考poj2411

    这题用直接枚举是超时的,必须要用搜索来搜索出所有可能的状态,然后再进行枚举 这是较慢的做法 /* 方格取数,相邻格子的数不可取,问最多取到的和是什么 有点类似炮兵布阵,先打出所有可能的状态,然后dp[ ...

  3. SharePoint 2010:搜索服务当前处于脱机状态

    错误 搜索服务当前处于脱机状态.请访问 SharePoint 管理中心中的"服务器上的服务"页,以验证是否启用了该服务.这也可能是由于正在移动索引器所致.   正在配置网站集搜索关 ...

  4. iOS 如何改变搜索取消按钮的值和颜色

    在初始化的时候加上下面两句就行了,试了无数方法,什么遍历查找子元素啊什么的都白搭,也不知道为啥还说可以,下面代码测试是有效果的: //改变搜索取消按钮的文字颜色 [[UIBarButtonItem a ...

  5. 解决appium点击软键盘上的搜索按钮

    在执行appium自动化测试的时候,需要点击软件盘上的搜索按钮. 具体操作步骤如下: 前提:需要事先安装搜狗输入法 1.唤醒软件盘,可以封装到一个类里,用到的时候随时调用. import os#调起s ...

  6. 搜索入门_简单搜索bfs dfs大杂烩

    dfs题大杂烩 棋盘问题  POJ - 1321 和经典的八皇后问题一样.  给你一个棋盘,只有#区域可以放棋子,同时同一行和同一列只能有一个棋子. 问你放k个棋子有多少种方案. 很明显,这是搜索题. ...

  7. android通知栏Notification点击,取消,清除响应事件

    主要是检测android通知栏的三种状态的响应事件 这次在实现推送需求的时候,要用到android通知栏Notification点击后进入消息页面,因为要实现一个保存推送用户名字的功能,我在点击后处理 ...

  8. ElasticSearch 2 (14) - 深入搜索系列之全文搜索

    ElasticSearch 2 (14) - 深入搜索系列之全文搜索 摘要 在看过结构化搜索之后,我们看看怎样在全文字段中查找相关度最高的文档. 全文搜索两个最重要的方面是: 相关(relevance ...

  9. 云搜索服务在APP搜索场景的应用

    搜索无处不在,尤其是在移动互联的今天.无论是社交,电商,还是视频等APP中,搜索都已经在其中扮演了重要的角色.作为信息的入口,搜索能帮用户从海量信息中找到想要的信息.在APP搜索的典型场景如下: ●  ...

随机推荐

  1. 关于Oralce数据库优化的几点总结

    个人理解,数据库性能最关键的因素在于IO,因为操作内存是快速的,但是读写磁盘是速度很慢的,优化数据库最关键的问题在于减少磁盘的IO,就个人理解应该分为物理的和逻辑的优化, 物理的是指oracle产品本 ...

  2. STL的一些泛型算法

    源地址:http://blog.csdn.net/byijie/article/details/8142859 从福州大学资料里摘下来的我现在能理解的泛型算法 algorithm min(a,b) 返 ...

  3. OCP读书笔记(9) - 诊断数据库

    数据库恢复顾问 Data Recovery Advisor的命令行选项 1. 启动 RMAN 进程并连接到目标$ rman target=/ 2. 假设发生了某个错误,希望找出原因,使用 list f ...

  4. Oracle GoldenGate for Oracle 11g to PostgreSQL 9.2.4 Configuration

    Installing and setting up Oracle GoldenGate connecting to an Oracle database Also please make sure t ...

  5. bzoj2301(莫比乌斯反演+分块)

    传送门:2301: [HAOI2011]Problem b 题意:对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函数为x和y ...

  6. 在Mybatis中使用注解@多个參数查询

    @Select("SELECT * FROM wc_homework WHERE organization_id=#{classId} ORDER BY createtime DESC LI ...

  7. 公布AppStore被拒绝的经历

    我们知道IOS发布的版本有很多原因是苹果拒绝发表,我总结了这里3手头上做的原因,他拒绝游,包括同事.朋友拒绝的理由,IOS app参考朋友. 1. 使用非公开API该计划将被拒绝 2. beta版.d ...

  8. python手记(46)

    #!/usr/bin/env python   # -*- coding: utf-8 -*- #http://blog.csdn.net/myhaspl   #code:myhaspl@qq.com ...

  9. JAVA 读取图片储存至本地

    需求:serlvet经过处理通过报表工具返回一张报表图(柱状图 折线图). 现在需要把这个图存储到本地 以便随时查看 // 构造URL URL url = new URL(endStr); // 打开 ...

  10. HDU 2825 AC自动机+DP

    题意:一个密码,长度为 n,然后有m个magic words,这个密码至少由k个magic words组成. 问这个密码可能出现的总数. 思路:首先构造AC自动机,由于m很小,才10 ,我们可以使用二 ...