首页 > 代码库 > 点击搜索取消UISearchDisplayController的搜索状态
点击搜索取消UISearchDisplayController的搜索状态
一般,我们用到UISearchDisplayController的时候,都是需要对一个数据源进行刷选,在UISearchDisplayController自带的tableView中展示出来,然后点击退出详情.我最近在做大众点评第三方的时候,遇到一个问题,我展示出了全部商店,想加搜索功能,但是不知道输入的搜索关键字去跟什么匹配,大众点评也并没有提供一个用来刷选的数据源接口,这样,我只能自己输入关键字,不用它数据源提供刷选补全内容,而直接点击弹出键盘的搜索键,进行搜索.不过点击搜索后,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); // 获取"取消"按钮 if([subView isKindOfClass:[UIButton class]]) { UIButton *cancelButton = (UIButton *)subView; // 获取点击"取消"按钮的响应事件(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------点击搜索按钮 - (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar{ // 获取你想搜索的最终完整关键字(一般可以用来做搜索历史展示) NSLog(@"%s__%d__|%@",__FUNCTION__,__LINE__,searchBar.text); // 点击按钮时,发布取消搜索状态通知 [[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);
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。