今天在使用UISearchDisplayController和UISearchBar時,出現了無法進入全屏搜索模式等問題,折騰了很長一段時間才解決掉。在這裏把心得分享給大家,希望能對大家有幫助。
首先需要明確的是,如果不需要使用全屏模式搜索模式的話,用UISearchBar就夠了,直接初始化加入controller中即可。但是我們在實踐中常常需要使用到全屏搜索。全屏搜索的代碼在網上一搜可以搜到很多,所以在這裏只對容易出錯的問題進行說明。
1.如果開啓了ARC模式,必須用成員變量初始化UISearchDisplayController,否則無法使用self.searchDisplayController訪問剛剛創建的UISearchDisplayController。雖然在創建UISearchDisplayController時已經將self的指針傳給了UISearchDisplayController,但是系統並沒有將其retain,所以一旦超出了局部變量的作用域,self.searchDisplayController就會被置空。具體原因可以看看arc中對於weak指針的描述。
2.如果要進入全屏搜索模式,需要設置UISearchBar的delegate,並實現searchBarShouldBeginEditing方法。在中間執行:
- [self.searchDisplayController setActive:YES animated:YES];
3.以下三行代碼的delegate不一定要設置成self,設置成別的viewcontroller也行,有利於代碼分離,更清晰。
- [self.searchDisplayController setDelegate:self];
- [self.searchDisplayController setSearchResultsDataSource:self];
- [self.searchDisplayController setSearchResultsDelegate:self];
4.在UISearchDisplayControllerDelegate中實現的兩個方法:
- -(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString {
- return YES;
- }
- - (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchScope:(NSInteger)searchOption {
- return YES;
- }