今天第一次用UISearchBar+UISearchDisplayController感覺非常神奇。以前都是只用searchbar。看到蘋果內建的搜尋都是有黑色介面
確不知道怎麼實現的 今天就用了UISearchBar+UISearchDisplayController實現了這樣的效果。
在做demo的時候發現了一些神奇的事情。
1.你完全不用tableview的reloaddata。
2.你只需要寫- (void)searchBar:(UISearchBar *)searchBar
textDidChange:(NSString *)searchTerm這一個 searchbar的委託。就能完成以前的搜尋的功能。
測試出了個問題 還要加上
- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar{
要resetdata
}
因為tableview的綁定資料來源來自同一個delegate,如果不reset,數組會出現問題
3.如果要想擋住navigationbar的話就要是navigationcontroller不能是自己添加的navigationbar,當然tabbarcontroller也對擋住。
我認為UISearchDisplayController中有自己的tableview和在你建立的tableview不是同一個對象。
如果你不想讓搜尋出的結果(cell)有 點擊事件 就在
- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath方法中判斷tableview是不是你的tableview。
附上搜尋的代碼
- (void)resetSearch { [maLoadData_ removeAllObjects];[maLoadData_ addObjectsFromArray:maSource_];}- (void)handleSearchForTerm:(NSString *)searchTerm{ NSMutableArray *toRemove = [[NSMutableArray alloc] init]; [self resetSearch]; for (NSString *key in maLoadData_) { if ([key rangeOfString:searchTerm options:NSCaseInsensitiveSearch].location == NSNotFound)[toRemove addObject:key]; } [maLoadData_ removeObjectsInArray:toRemove]; //[table reloadData];}
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchTerm{ if ([searchTerm length] == 0) { [self resetSearch]; //[table reloadData]; return; } [self handleSearchForTerm:searchTerm]; }