UISearchController進行網路實時搜尋
首先設定一個搜尋button用以觸發搜尋
self.navigationItem.rightBarButtonItem = [[UIBarButtonItemalloc] initWithBarButtonSystemItem:UIBarButtonSystemItemSearchtarget:selfaction:@selector(searchBarButtonItemAction:)];
接下來到方法中進行
- (void)searchBarButtonItemAction:(UIButton *)sender {
self.tableViewVC = [[UITableViewController
self.tableViewVC.tableView.frame = CGRectMake(0, 0, kWidth, kHeight - 49 - 64);
_tableViewVC.tableView.tableFooterView =[[UIViewalloc] initWithFrame:CGRectZero];
_tableViewVC.tableView.delegate = self;
_tableViewVC.tableView.dataSource = self;
_tableViewVC
[_tableViewVC.tableViewregisterClass:[SearchCellclass] forCellReuseIdentifier:@"search"];
self.searchVC = [[UISearchControlleralloc] initWithSearchResultsController:self.tableViewVC];
self.searchVC.delegate = self;
_searchVC.searchResultsUpdater = self;
[_searchVC
_searchVC.searchBar.placeholder = @"搜尋新聞/使用者/公司";
self.tabBarController.tabBar.hidden = YES;
[selfpresentViewController:self.searchVCanimated:YEScompletion:nil];
}
UISearchController的建立需要指定一個展示搜尋結果的控制器, 如果填nil預設為當前控制器. 在實際應用中, 當前控制器並不適合展示結果, 所以新建了一個tableview展示結果.
如果當前控制器的導航欄是不透明的, 需要設定
[_searchVC setHidesNavigationBarDuringPresentation:NO];
否則searchBar會顯示不完全. 如果當前控制器的導航欄是透明的, searchBar會正常顯示, 但是會導致滾動試圖有時莫名其妙縮排, 我還沒搞明白, 下望大家交流下.
點選搜尋後, 會彈出seachBar, 在searchBar輸入要搜尋的關鍵字, 這時下面這個方法就會執行, 當然要先指定
_searchVC.searchResultsUpdater =self;
我以向伺服器介面傳送post請求為例. 你每輸入一個字或一個字母他就會執行一次下面的方法, 所以搜尋資料就會實時展示
#pragma mark - UISearchResultsUpdating
- (void)updateSearchResultsForSearchController:(UISearchController *)searchController
{
self.searchKey = searchController.searchBar.text;
NSMutableURLRequest *requirest = [NSMutableURLRequestrequestWithURL:[NSURLURLWithString:@"https://介面網址"]];
NSString *value =[NSString stringWithFormat:@"word=%@", self.searchKey];
requirest.HTTPBody = [value dataUsingEncoding:NSUTF8StringEncoding];
requirest.HTTPMethod = @"POST";
[NSURLConnection sendAsynchronousRequest:requirest queue:[NSOperationQueue currentQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
NSDictionary *dic = [NSJSONSerializationJSONObjectWithData:data options:NSJSONReadingMutableLeaveserror:nil];
self.result = [[Result alloc] initWithDictionary:dic[@"data"]];
[self.tableViewVC.tableView reloadData];
}];
}