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 plaincopy
  1. [self.searchDisplayController setActive:YES animated:YES];  

3.以下三行代碼的delegate不一定要設置成self,設置成別的viewcontroller也行,有利於代碼分離,更清晰。

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

4.在UISearchDisplayControllerDelegate中實現的兩個方法:

[plain] view plaincopy
  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中設置。



如果大家覺得對自己有幫助的話,還希望能幫頂一下,謝謝:)
轉載請註明出處,謝謝!
發佈了72 篇原創文章 · 獲贊 0 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章