先來看看文件解釋:
UISearchBarDelegate:定義一些可供選擇的方法讓你實作的UISearchBar控制器使用。UISearchBar物件提供使用者介面在Bar上的搜尋field。但是按鈕是由app負責去實作動作。最低限度是這個委任需要在text輸入到text field時去執行搜尋。
UISearchDisplayDelegate:定義了UISearchDisplayController的物件的委任方法。
其實這兩個差很多,前者主要是幫搜尋列實作它的功能,後者有管理到他所搜尋的table。
UISearchBarDelegate:定義一些可供選擇的方法讓你實作的UISearchBar控制器使用。UISearchBar物件提供使用者介面在Bar上的搜尋field。但是按鈕是由app負責去實作動作。最低限度是這個委任需要在text輸入到text field時去執行搜尋。
UISearchDisplayDelegate:定義了UISearchDisplayController的物件的委任方法。
其實這兩個差很多,前者主要是幫搜尋列實作它的功能,後者有管理到他所搜尋的table。
如何使用UISearchBarDelegate
一般說來,你要在nib裡面拉一個Search Bar,然後由file's owner來接受委任。然後在View Controller實作裡面處理搜尋:- -(void)searchBarSearchButtonClicked:(UISearchBar *)searchBar;
處理Search鍵被按下時要做的事情 - -(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText;
處理當Search字串改變時要做的事 - -(void)searchBarCancelButtonClicked:(UISearchBar *)searchBar;
處理Cancel按鈕按下後要做的事情
如何使用UISearchDisplayDelegate
這個做法比較不一樣,你不需要在nib裡面拉什麼元件,只需要有拉出Table View就好了。然後實作一些委任方法:- - (void)searchDisplayController:(UISearchDisplayController *)controller
didLoadSearchResultsTableView:(UITableView *)tableView;
這是告訴委任,controller已經載入了它的Table View - - (BOOL)searchDisplayController:(UISearchDisplayController *)controller
shouldReloadTableForSearchString:(NSString *)searchString;
這是說,如果Table View應該為了給定的搜尋字串而重新載入,那就要求委任這樣做。如果沒有時作這個方法,那一旦搜尋字串改變,result table就會重新載入。
- 首先製作一個UISearchBar。
- 將這UISearchBar放在table view的tableHeaderView裡面:
EX: tableView.tableHeaderView = searchBar; - 用這UISearchBar去初始化UISearchDisplayController:
EX: searchController = [[UISearchDisplayController alloc]
initWithSearchBar:searchBar
contentsController:self];
contentsController是指出用來管理會被搜尋的內容的控制器為何。
留言
張貼留言