UISearchDisplayController学习笔记

今天在使用UISearchDisplayController和UISearchBar时,出现了无法进入全屏搜索模式等问题,折腾了很长一段时间才解决掉。在这里把心得分享给大家,希望能对大家有帮助。

首先需要明确的是,如果不需要使用全屏模式搜索模式的话,用UISearchBar就够了,直接初始化加入controller中即可。但是我们在实践中常常需要使用到全屏搜索。全屏搜索的代码在网上一搜可以搜到很多,所以在这里只对容易出错的问题进行说明。

1.如果开启了ARC模式,必须用成员变量初始化UISearchDisplayController,否则无法使用self.searchDisplayController访问刚刚创建的UISearchDisplayController。虽然在创建UISearchDisplayController时已经将self的指针传给了UISearchDisplayController,但是系统并没有将其retain,所以一旦超出了局部变量的作用域,self.searchDisplayController就会被置空。具体原因可以看看arc中对于weak指针的描述。

2.如果要进入全屏搜索模式,需要设置UISearchBar的delegate,并实现searchBarShouldBeginEditing方法。在中间执行:

[plain]  view plain copy
  1. [self.searchDisplayController setActive:YES animated:YES];  

3.以下三行代码的delegate不一定要设置成self,设置成别的viewcontroller也行,有利于代码分离,更清晰。

[plain]  view plain copy
  1. [self.searchDisplayController setDelegate:self];  
  2. [self.searchDisplayController setSearchResultsDataSource:self];  
  3. [self.searchDisplayController setSearchResultsDelegate:self];  

4.在UISearchDisplayControllerDelegate中实现的两个方法:

[plain]  view plain copy
  1. -(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString {  
  2.     return YES;  
  3. }  
  4.   
  5. - (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchScope:(NSInteger)searchOption {  
  6.     return YES;  
  7. }  
第一个方法是在搜索内容改变时调用,第二个方法是在搜索范围改变时调用。搜索范围见下图中的All, Device, Desktop, Portable。这些按钮可以在searchBar的scopeButtonTitles中设置。



如果大家觉得对自己有帮助的话,还希望能帮顶一下,谢谢:)
转载请注明出处,谢谢!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值