Панель поиска для UITableView: я бы хотел, чтобы он выполнял поиск как по textLabels, так и по detailTextLabels (iOS 5.0, xcode 4.2) - PullRequest
0 голосов
/ 04 декабря 2011

Я настроил панель поиска для своего табличного представления, и я хотел бы, чтобы она осуществляла поиск как по textLabels (основной текст), так и detailTextLabels (основной текст), сохраняя при этом связь между основными метками и метками сведений.при сужении поиска.Прямо сейчас я могу искать только по основным меткам, но метки с подробностями не останутся с соответствующими основными метками.У меня есть два массива, которые содержат строки для основных меток и меток деталей.Вот код

Инициализация массивов, содержащих основные метки (groceryStores) и метки деталей (groceryStoreAddresses), а также массив поиска

 - (void)viewDidLoad
{
    [super viewDidLoad];

    self.groceryStores = [NSArray arrayWithObjects:@"Safeway",@"Grocery Store 1",@"Grocery Store 2",@"Grocery Store 3",@"Grocery Store 4",@"Grocery Store 5",@"Grocery Store 6",@"Grocery Store 7",nil];

    self.groceryStoreAddresses = [NSArray arrayWithObjects:@"1444 Shattuck Place, Berkeley, CA   94709",@"Address 1",@"Address 2",@"Address 3",@"Address 4",@"Address 5",@"Address 6",@"Address 7",nil];

    self.searchGroceryStores = [NSMutableArray arrayWithCapacity:[self.groceryStores count]];


}

Метод поиска

 - (BOOL) searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString {
    [self.searchGroceryStores removeAllObjects] ;

    for (NSString *groceryStore in self.groceryStores) {



        NSRange result = [groceryStore rangeOfString:searchString options:
                          NSCaseInsensitiveSearch];
        if (result.location != NSNotFound)
            [self.searchGroceryStores addObject:groceryStore];

    }

    return YES;
}

Строки в разделе настроены для функции поиска

  - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{

    if (tableView == self.searchDisplayController.searchResultsTableView) {
        return [self.searchGroceryStores count];
    }
    else {

    return [self.groceryStores count];
    }
}

cellForRowAtIndexPath настроены для функции поиска

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"UITableViewCellAccessoryDisclosureIndicator"];
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;        

    if (tableView == self.searchDisplayController.searchResultsTableView) {
        cell.textLabel.text = [self.searchGroceryStores objectAtIndex:indexPath.row];
        cell.detailTextLabel.text = [self.groceryStoreAddresses objectAtIndex:indexPath.row];
    }
    else {
        cell.textLabel.text = [self.groceryStores objectAtIndex:indexPath.row];
        cell.detailTextLabel.text = [self.groceryStoreAddresses objectAtIndex:indexPath.row];
    }

    // Configure the cell...

    return cell;
}

Пожалуйста, помогите, если можете.Большое спасибо за ваше время, я ценю это.

1 Ответ

1 голос
/ 04 декабря 2011

Вам нужно держать массив searchGroceryStoreAddresses параллельно с вашим searchGroceryStores массивом.Пример:

- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString {
    [self.searchGroceryStores removeAllObjects];
    [self.searchGroceryStoreAddresses removeAllObjects];
    for (int i = 0, c = self.groceryStores.count; i < c; ++i) {
        NSString *groceryStore = [self.groceryStores objectAtIndex:i];
        NSString *address = [self.groceryStoreAddresses objectAtIndex:i];
        NSRange result = [groceryStore rangeOfString:searchString options:
                          NSCaseInsensitiveSearch];
        if (result.location != NSNotFound) {
            [self.searchGroceryStores addObject:groceryStore];
            [self.searchGroceryStoreAddresses addObject:address];
        }
    }
    return YES;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...