点击搜索取消UISearchDisplayController的搜索状态

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

[objc]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. #pragma mark - 点击搜索,能够取消搜索状态  
  2. #pragma mark UISearchDisplayDelegate  
  3. - (void)searchDisplayControllerDidBeginSearch:(UISearchDisplayController *)controller  
  4. {  
  5.     for (UIView *view in controller.searchBar.subviews)  
  6.     {  
  7.          NSLog(@"%d__|---%@",__LINE__,view);  
  8.         for (UIView *subView in view.subviews)  
  9.         {  
  10.              NSLog(@"%d__|!!!%@",__LINE__,subView);  
  11.             //  获取"取消"按钮  
  12.             if([subView isKindOfClass:[UIButton class]])  
  13.             {  
  14.                 UIButton *cancelButton = (UIButton *)subView;  
  15.                 //  获取点击"取消"按钮的响应事件(actionsForTarget 这个方法返回的是一个数组)  
  16.                 self.cancelSearchSELString = [[cancelButton actionsForTarget:controller.searchBar forControlEvent:UIControlEventTouchUpInside] objectAtIndex:0];  
  17.                 //  响应通知,执行方法直接用上面获得的响应事件方法,转换一下(这是个知识点,可以扩展下)  
  18.                 [[NSNotificationCenter defaultCenter] addObserver:controller.searchBar selector:NSSelectorFromString(self.cancelSearchSELString) name:@"cancelSearch" object:nil];  
  19.             }  
  20.         }  
  21.     }  
  22. }  
  23.   
  24. #pragma mark UISearchBarDelegate------点击搜索按钮  
  25. - (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar{  
  26.   
  27.     //  获取你想搜索的最终完整关键字(一般可以用来做搜索历史展示)    
  28.     NSLog(@"%s__%d__|%@",__FUNCTION__,__LINE__,searchBar.text);  
  29.     //  点击按钮时,发布取消搜索状态通知  
  30.     [[NSNotificationCenter defaultCenter] postNotificationName:@"cancelSearch" object:nil];  
  31.     //  发布---响应---取消通知  
  32.     [[NSNotificationCenter defaultCenter] removeObserver:searchBar name:@"cancelSearch" object:nil];  
  33. }  


@扩展一下知识点:

[objc]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. 可以用actionsForTarget方法,来获取针对某一特定事件目标的全部动作列表:  
  2. [java] view plaincopyprint?  
  3. NSArray* myActions = [ myControl actionForTarget:UIControlEventValueChanged ];    

[objc]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. //  一些特别的转换  
  2. @class NSString, Protocol;  
  3.   
  4. FOUNDATION_EXPORT NSString *NSStringFromSelector(SEL aSelector);  
  5. FOUNDATION_EXPORT SEL NSSelectorFromString(NSString *aSelectorName);  
  6.   
  7. FOUNDATION_EXPORT NSString *NSStringFromClass(Class aClass);  
  8. FOUNDATION_EXPORT Class NSClassFromString(NSString *aClassName);  
  9.   
  10. FOUNDATION_EXPORT NSString *NSStringFromProtocol(Protocol *proto) NS_AVAILABLE(10_52_0);  
  11. FOUNDATION_EXPORT Protocol *NSProtocolFromString(NSString *namestr) NS_AVAILABLE(10_52_0);  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值