Как создать ДВУХ Дисплей Поиск IPAD
Я хочу разместить два дисплея поиска в одном контроллере представления (iPad). Я перетаскиваю два контроллера дисплея поиска в моем контроллере представления, однако работает только один дисплей поиска.
В Инспекторе подключений я обнаружил, что один из выводов окна поиска "searchDisplayController" подключен к "Контроллеру дисплея поиска", однако другой не имел этого соединения. Я думаю, именно поэтому работает только один дисплей поиска.
У меня такой вопрос: как мы можем использовать два дисплея поиска в одном контроллере представления? Я думаю, что мой метод: перетащить два Search Display Controller может быть неправильным.
PS. Я использую следующий код, чтобы определить, на каком дисплее отображается фокус.
- (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar {
if (searchBar == self.customerTelSearchBar) {
telSearchEditing = YES;
addressSearchEditing = NO;
}else if(searchBar == self.addressSearchBar){
telSearchEditing = NO;
addressSearchEditing = YES;
}
return YES;
}
1 ответ
Всегда не работайте с раскадровкой, однако, когда я использую программную реализацию двух экранов поиска, это работает. Я публикую здесь мой код:
- (void)viewDidLoad
{
[super viewDidLoad];
// Init customerSearchDisplayController
self.customerTelSearchBar.delegate = self;
customerSearchDisplayController = [[UISearchDisplayController alloc] initWithSearchBar:self.customerTelSearchBar contentsController:self];
customerSearchDisplayController.delegate = self;
customerSearchDisplayController.searchResultsDataSource = self;
customerSearchDisplayController.searchResultsDelegate = self;
// Init addressSearchDisplayController
self.addressSearchBar.delegate = self;
addressSearchDisplayController = [[UISearchDisplayController alloc] initWithSearchBar:self.addressSearchBar contentsController:self];
addressSearchDisplayController.delegate = self;
addressSearchDisplayController.searchResultsDataSource = self;
addressSearchDisplayController.searchResultsDelegate = self;
// SearchBar status
telSearchEditing = NO;
addressSearchEditing = NO;
}
-(void)filterTelForSearchText:(NSString*)searchText {
[filtredCustomersArray removeAllObjects];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF.tel contains[c] %@",searchText];
filtredCustomersArray = [NSMutableArray arrayWithArray:[allCustomersArray filteredArrayUsingPredicate:predicate]];
}
-(void)filterAddressForSearchText:(NSString*)searchText {
[filtredAddressArray removeAllObjects];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF.address contains[c] %@",searchText];
filtredAddressArray = [NSMutableArray arrayWithArray:[allAddressArray filteredArrayUsingPredicate:predicate]];
}
-(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString {
if (telSearchEditing) {
[self filterTelForSearchText:searchString];
}else if (addressSearchEditing){
[self filterAddressForSearchText:searchString];
}
return YES;
}
- (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar {
if (searchBar == self.customerTelSearchBar) {
telSearchEditing = YES;
addressSearchEditing = NO;
}else if(searchBar == self.addressSearchBar){
telSearchEditing = NO;
addressSearchEditing = YES;
}
return YES;
}