UISearchBar和UISearchDisplayController

简介: <h4><span style="font-size:24px">原文 http://hi.baidu.com/happywilma0118/item/e6d5730a499bba1b3a53eef8 <br> UISearchBar继承自UIView、UIResponder、NSObject <br>  属性: autocapitalizationType————自动对输入文本对象进

原文 http://hi.baidu.com/happywilma0118/item/e6d5730a499bba1b3a53eef8 
UISearchBar继承自UIView、UIResponder、NSObject 
 属性: autocapitalizationType————自动对输入文本对象进行大小写设置(包含4种类型,但是有时候键盘会屏蔽此属性)
 autocorrectionType————自动对输入文本对象进行纠错。
 backgroundImage————searchbar的背景图片,如果图片不是可伸缩的或者1点宽,则一般被平铺 
barStyle————控件的样式
 delegate————控件的委托,委托要遵从UISearchBarDelegate协议,默认是nil
 keyboardType————输入时,键盘的样式 placeholder————半透明的提示文字,输入搜索内容消失 
prompt————显示在控件顶部的一行提示文字 
text————控件上面的显示的文字 
showsBookmarkButton————是否在控件的右端显示一个书的按钮(输入文字时消失) 
showsCancelButton————是否显示cancel按钮(默认是显示) 
showsSearchResultsButton————是否在控件的右端显示搜索结果按钮 
searchResultsButtonSelected————搜索结果按钮是否被选中 
tintColor————bar的颜色(具有渐变效果) 
translucent————指定控件是否会有透视效果 
scopeButtonTitles————搜索栏下部的选择栏,数组里面的内容是按钮的标题 
selectedScopeButtonIndex————搜索栏下部的选择栏按钮的个数 
showsScopeBar————控制搜索栏下部的选择栏是否显示出来(需设置为YES 才能使用scopebar) 
UISearchBar不执行搜索行为,必须使用delegate,当输入搜索文本、点击button按钮后,代理的方法会完成搜索对应的操作。
 1.编辑输入事件:– searchBar:textDidChange: 
– searchBar:shouldChangeTextInRange:replacementText:
– searchBarShouldBeginEditing:– searchBarTextDidBeginEditing:
– searchBarShouldEndEditing:– searchBarTextDidEndEditing:
2.点击按钮事件:– searchBarBookmarkButtonClicked:
– searchBarCancelButtonClicked:
– searchBarSearchButtonClicked:
– searchBarResultsListButtonClicked:
3.Scope按钮事件:– searchBar:selectedScopeButtonIndexDidChange: 
利用UISearchBar的委托事件 textDidChange, 当在搜索框中输入完成后,如果输入的文本长度>0,可以调用自己的搜索方法,得到搜索结果,然后再reloadData,刷新一下。如果输入文本长 度<0,则需要恢复到原始数据。这个方法可以在边输入搜索文本边显示结果。 如果需要按“search”按钮再搜索,
则将上述操作放在searchBarSearchButtonClicked中。 利用UISearchDisplayController可以简化很多操作,也能达到搜索的目的。
属性:
active————是搜索界面可视化,默认为no,可用setActive方法设置.
delegate————委托searchBar————在searchdisplaycontroller初始化后,searchbar是不可修改的,是readonly属性的.
searchContentController————管理搜索内容的试图控制器,一般是一个UITableViewController的实例,意思是针对一个UITableView的内容进行搜索searchResultsDataSource————搜索结果的数据源searchResultsDelegate————搜索结果的委托searchResultsTableView————搜索结果要展示在哪个tableview中(read-only);
searchResultsTitle————搜索结果视图的title 
初始化一个searchDisplayController: UISearchBar * theSearchBar = [[[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width-50, 40)] autorelease];

 theSearchBar.placeholder = @"enter province name"; theSearchBar.autocorrectionType = UITextAutocorrectionTypeNo; theSearchBar.autocapitalizationType = UITextAutocapitalizationTypeAllCharacters; 

 theSearchBar.scopeButtonTitles = [NSArray arrayWithObjects:@"All",@"A",@"B",@"C",@"D" ,nil]; theSearchBar.showsScopeBar = YES;

 theSearchBar.keyboardType = UIKeyboardTypeNamePhonePad; theSearchBar.showsBookmarkButton = YES; 

 tableView.tableHeaderView = theSearchBar;

 //将searchBar添加到tableView的头,注意滚动出屏幕后,搜索框也不在了,只出现在首页 

 UISearchDisplayController * searchdispalyCtrl = [[UISearchDisplayController alloc] initWithSearchBar:theSearchBar contentsController:self]; searchdispalyCtrl.active = NO; searchdispalyCtrl.delegate = self; searchdispalyCtrl.searchResultsDelegate=self; searchdispalyCtrl.searchResultsDataSource = self; 

使用UISearchDisplayDelegate的委托方法进行搜索操作:

1.搜索状态改变:– searchDisplayControllerWillBeginSearch:– searchDisplayControllerDidBeginSearch:– searchDisplayControllerWillEndSearch:

– searchDisplayControllerDidEndSearch:

2.装载和卸载tableview:– searchDisplayController:didLoadSearchResultsTableView:– searchDisplayController:willUnloadSearchResultsTableView:

3.显示和隐藏tableview:– searchDisplayController:willShowSearchResultsTableView:– searchDisplayController:didShowSearchResultsTableView:– searchDisplayController:willHideSearchResultsTableView:– searchDisplayController:didHideSearchResultsTableView:

4.搜索条件改变时响应:– searchDisplayController:shouldReloadTableForSearchString: – searchDisplayController:shouldReloadTableForSearchScope: searchDisplayController 自身有一个searchResultsTableView,

所以在执行操作的时候首先要判断是否是搜索结果的tableView,如果是显示的就是搜索结 果的数据,如果不是,是TableView自身的view,则需要显示原始数据。

 if(tableView == self.searchDisplayController.searchResultsTableView) { arr = [self.filterContent valueForKey:key]; //搜索结果 } else { arr = [self.localresource valueForKey:key]; //原始数据 } 这样就不需要每次都realoadData了。
 一 个很好的实例可以参考:http://developer.apple.com/library/ios/#samplecode /TableSearch/Introduction/Intro.html#//apple_ref/doc/uid/DTS40007848

目录
相关文章
|
8月前
|
XML 存储 分布式计算
【赵渝强老师】史上最详细:Hadoop HDFS的体系架构
HDFS(Hadoop分布式文件系统)由三个核心组件构成:NameNode、DataNode和SecondaryNameNode。NameNode负责管理文件系统的命名空间和客户端请求,维护元数据文件fsimage和edits;DataNode存储实际的数据块,默认大小为128MB;SecondaryNameNode定期合并edits日志到fsimage中,但不作为NameNode的热备份。通过这些组件的协同工作,HDFS实现了高效、可靠的大规模数据存储与管理。
884 70
|
SQL 前端开发 算法
【HR专用】Vue+SpringBoot,实现人才招聘库的开发(后端部分)(一)
【HR专用】Vue+SpringBoot,实现人才招聘库的开发(后端部分)
234 0
|
1月前
|
存储 机器学习/深度学习 监控
67_Transformers库进阶:模型加载与配置优化
随着大型语言模型(LLM)技术的迅速发展,Hugging Face的Transformers库已经成为LLM开发和应用的标准工具包。作为一个开源的深度学习库,Transformers提供了丰富的预训练模型、统一的接口设计以及强大的生态系统,使得研究人员和开发者能够便捷地构建、训练和部署各类语言模型。2025年,Transformers库已经发展到5.x系列,不仅支持最新的GPU架构和量化技术,还提供了更完善的分布式训练能力和内存优化方案。
|
7月前
|
数据库 对象存储
2025年 | 5月云大使推广奖励规则
【近期云大使规则升级】①上线老用户返佣规则。②企业云大使提现功能上线。③优化推广奖励限制。④调整用户关联周期。⑤新增沉睡用户返利 。⑥推荐企业认证新用户首购最高奖励45%。
|
4月前
|
Android开发 数据安全/隐私保护 Python
微信抢红包脚本安卓插件,微信xposed抢红包模块, magisk微信抢红包模块
这个代码实现了一个完整的微信抢红包自动化工具,包含红包检测、自动点击、日志记录等功能
|
6月前
|
数据采集 前端开发 JavaScript
Python爬虫如何应对网站的反爬加密策略?
Python爬虫如何应对网站的反爬加密策略?
421 11
|
弹性计算 关系型数据库 数据库
手把手带你从自建 MySQL 迁移到云数据库,一步就能脱胎换骨
阿里云瑶池数据库来开课啦!自建数据库迁移至云数据库 RDS原来只要一步操作就能搞定!
|
机器学习/深度学习 人工智能 自然语言处理
20用于深度学习训练和研究的数据集
无论是图像识别,自然语言处理,医疗保健还是任何其他人工智能领域感兴趣,这些数据集都是非常重要的,所以本文将整理常用且有效的20个数据集。
1063 1
|
SQL 存储
【TiDB原理与实战详解】3、 集群升级和逻辑备份恢复~学不会? 不存在的!
TiDB集群可通过打补丁和版本升级来维护。打补丁针对特定组件(如TiDB或TiKV)进行,而版本升级包括不停机升级和停机升级两种方式,前者会重启部分组件。升级前需更新tiup工具并调整拓扑配置,确保集群健康。TiDB的数据备份与恢复依赖于Dumpling和TiDB Lightning工具,前者负责数据导出,后者用于数据导入。导出时推荐使用小文件和多线程以提升效率,并可通过多种参数控制导出细节。恢复时需注意备份目录与存储节点分离,并可通过配置文件控制导入过程,支持断点续传及错误处理策略。此外,4.0及以上版本支持库表过滤功能,便于灵活管理数据导入。
|
存储 算法 数据挖掘
深入解析力扣166题:分数到小数(模拟长除法与字符串操作详解及模拟面试问答)
深入解析力扣166题:分数到小数(模拟长除法与字符串操作详解及模拟面试问答)

热门文章

最新文章