Как создать ДВУХ Дисплей Поиск 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;
}
Другие вопросы по тегам