UISearchBar和UISearchDispalyController的详细使用.docx_第1页
UISearchBar和UISearchDispalyController的详细使用.docx_第2页
UISearchBar和UISearchDispalyController的详细使用.docx_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

UISearchBar和UISearchDispalyController的详细使用最近在使用UISearchBar和UISearchDisplayController控件的时候,遇到了一些问题,但是在网络查找答案的过程中,发现网络上对于这两个空间的详细使用还没太全的资料,所以我对于自己这段时间解决的问题对这两个控件做一下详细解读。先详细介绍一下这两个控件一 、UISearchBar是一个继承于UIView的控件,既然是个view,它自身就会(也)包含了很多视图样式设置的方法,比如searchbar背景、scopeBar背景和searchbar上文字的设置。searchbar实现搜索的原理是通过自身的delegate完成数据的查询并对相应的tableview进行reload操作。代码如下。CSDN:CODE:233textDidChange方法(一下都对方法进行这样可识别的简写)是在每次在搜索框中输入数据的时候运行的。searchbar自身带有4个按钮,这些按钮默认状态都是隐藏的。它们分别是 1.searchResultsButton 2.BookmarksButton 3.CancelButton 4.ScopeBar(它包含scopebarbutton)searchBarSearchButtonClicked方法是对键盘上search键的点击事件,在这个方法中我们可以根据功能需求来完成一些操作,我在此对键盘进行了消失操作。 searchBarBookmarkButtonClicked方法是BookmarksButton的点击事件。 searchBarCancelButtonClicked方法是CancelButton的点击事件,一般取消按钮的方法中是对放弃搜索的逻辑操作,比如tableview的datasource恢复。 searchBarResultsListButtonClicked方法是searchResultsButton的点击事件。selectedScopeButtonIndexDidChange:(NSInteger)selectedScope是scopebarbutton的点击事件。通过delegate方法名字就能看出他们所代表意思,我们可以根据自己的业务需求来进行一些相关操作和数据处理。二、UISearchDiplayController是一个继承于NSObject的控件,它本身包含UISearchBar,UITableView两个控件。它自身带的tableview我们为了与我们自己建的区别开来,俗称它为resultTableview。虽然这两个tableview不是同一个tableview,但是他们的delegate的内容和样式都与我们自己的tableview是相同的。其中最重要的delegate就是一下所示的,搜索方法了,这个方法返回的是bool类型,无需开发者自己reload tableview,系统会自动加载tableview。CSDN:CODE:236下面说一下delegate的其他方法。- (void) searchDisplayControllerWillBeginSearch:(UISearchDisplayController*)controller;这是点击searchbar将要进行搜索时发生的方法,可以再次对cancelbutton样式进行更改。1- (void) searchDisplayControllerDidBeginSearch:(UISearchDisplayController*)controller;这是点击searchbar已经进行搜索时发生的方法。2- (void)searchDisplayController:(UISearchDisplayController *)controller didLoadSearchResultsTableView:(UITableView *)tableView;这是在所搜框中第一次输入数据时发生的方法,是resulttableview的加载方法。3- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString;这是在所搜框中每次输入数据时发生的方法,可以说是对resulttableview进行reload的方法。4- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchScope:(NSInteger)searchOption;这是点击scopebutton后出发的方法,方法返回YES后会对resulttableview进行reload的方法。4- (void)searchDisplayController:(UISearchDisplayController *)controller willShowSearchResultsTableView:(UITableView *)tableView;这是resulttableview将要show的方法,每次在所搜框中输入数据时发生的方法。5- (void)searchDisplayController:(UISearchDisplayController *)controller didShowSearchResultsTableView:(UITableView *)tableView;这是resulttableview已经show的方法,每次在所搜框中输入数据时发生的方法。6- (void)searchDisplayController:(UISearchDisplayController *)controller willHideSearchResultsTableView:(UITableView *)tableView;这是resulttableview将要hiden的方法,点击取消按钮或者把搜索框中数据全部删除时发生。7- (void)searchDisplayController:(UISearchDisplayController *)controller didHideSearchResultsTableView:(UITableView *)tableView;这是resulttableview已经hiden的方法,点击取消按钮或者把搜索框中数据全部删除时发生。8- (void) searchDisplayControllerWillEndSearch:(UISearchDisplayController*)controller;这是在点击取消按钮之后将要发生的方法。9- (void)searchDisplayController:(UISearchDisplayController *)controller willUnloadSearchResultsTableView:(UITableView *)tableView;这是在点击取消按钮之后,发生的resultstableview卸载方法。10- (void) searchDisplayControllerDidEndSearch:(UISearchDisplayController*)controller;这是在点击取消按钮之后发生的方法。11以上方法,后边的数字标号是我测试他们发生的先后顺序之后标注的,数字代表他们发生的先后顺序。如果在endsearch的时候resultstableview还没有hiden,这是将先发生willendsearch然后发生willhide和didhide,之后发生didend。UISearchDisplayController的取消按钮show/hide不用我们通过代码去实现。当你点击UISearchDisplayController中UISearchBar输入框时,系统会自行帮你show。点击取消按钮,系统会帮你hide。使用UISearchDisplayController当键盘弹出来的时候,会默认把navagationBar给隐藏起来。如果不需要隐藏navagationBar,最好的处理方式就是重写UISearchDisplayController的-(void)setActive:(BOOL)visible animated:(BOOL)animated方法:自定义一个类CustomSearchDisplayController,继承自UISearchDisplayController,然后在.m文件中重写该方法,并在该方法中主动显示navagationBar。CSDN:CODE:238(UISearchDisplayController的tableView有一个标签,当没有匹配的结果时,默认会在tableView上显示一个“No Result”的标签。如果说想自定义这个标签,可以通过循环遍历出tableView上标签。我将方法写在willShowSearchResultsTableView方法中了。CSDN:CODE:239不过这个地方存在一个问题,我当时把遍历写到shouldReloadTableForSearchString中时,第一次NO Result标签不会改变,当再一次执行到shouldReloadTableForSearchString时,才会显示你的无结果标签。但是这个方法明明执行在will和didshow方法之前。希望高

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论