UISearch и TableViewCell

Когда я ищу, а затем выбираю строку, которая открывает только первую букву (например, буквы A.Others не открываются. NSLog и точка останова не помогают. Я не понимаю, в чем проблема.

@synthesize propertyList,  letters, filteredNames, searchController , arrayPlace;

    - (void)viewDidLoad {
        [super viewDidLoad];

       ............
    filteredNames = [[NSMutableArray alloc]init];
    searchController = [[UISearchController alloc]init];


    self.searchController.searchResultsUpdater = self;

    NSString *path = [[NSBundle mainBundle] pathForResource:@"names" ofType:@"plist"];
    self.propertyList = [NSDictionary dictionaryWithContentsOfFile:path];
    self.letters = [[self.propertyList allKeys] sortedArrayUsingSelector:@selector(compare:)];

}


#pragma mark - Table view data source

.......
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

    cell.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"cell bg1.png"]];

    cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;



    if (tableView.tag == 1){

        NSString *letter = self.letters[indexPath.section];;
        NSArray *keyValues = [[self.propertyList[letter] allKeys] sortedArrayUsingSelector:@selector(compare:)];
        cell.textLabel.text = keyValues[indexPath.row];
    } else{
        cell.textLabel.text = filteredNames[indexPath.row];
    }

    return cell;

}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{


    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];

    NSString *keyTitle = cell.textLabel.text;


    NSDictionary *peopleUnderLetter = [self.propertyList objectForKey:self.letters[indexPath.section]];

    __block NSDictionary *selectedPerson = nil;

    [peopleUnderLetter enumerateKeysAndObjectsUsingBlock:^(id  _Nonnull key, id  _Nonnull obj, BOOL * _Nonnull stop) {

        if ([key isEqualToString:keyTitle]) {

            selectedPerson = obj;

            *stop = YES;

        }

    }];

    if (selectedPerson) {

        DetailViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"DetailViewController"];
        // Push the view controller.
        [self.navigationController pushViewController:vc animated:YES];

        [vc setDictionaryGeter:selectedPerson];
    }

}

А также:

#pragma mark Search Display Delegate Methods

-(void)searchDisplayController:(UISearchController *)controller didLoadSearchResultsTableView:(UITableView *)tableView {
    [tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"Cell"];
}

-(BOOL)searchDisplayController:(UISearchController *)controller shouldReloadTableForSearchString:(NSString *)searchString

{

    [filteredNames removeAllObjects];
    if (searchString.length > 0) {
        NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF contains [search] %@", self.searchBar.text];

        for (NSString *letter in letters) {
            NSArray *matches = [[self.propertyList[letter] allKeys]filteredArrayUsingPredicate:predicate];

            [filteredNames addObjectsFromArray:matches];

        }

    }

    return YES;

}

Панель поиска не работает, и он выбирает строку после поиска. Если вы хотите получить больше информации, просто скажите мне по ответам, и я отредактирую свой вопрос, а затем вы отредактируете свой ответ.

1 ответ

Пожалуйста, объясните еще раз ясно. Вы ищете, используя любой алфавит, он показывает результат, который имеет только "A". Это то, что ты пытаешься сказать? Если это так, то удалите приведенный выше код и попробуйте следующий подход:-

  1. Перетащите строку поиска в контроллер представления и установите для его делегата значение self (вы найдете его свойство в свойстве делегата раскадровки для контроллера представления).
  2. Добавьте UISearchBarDelegate в файл.h, который позаботится об автоматическом вызове соответствующих методов панели поиска, для которой делегат установлен на self.
  3. Используйте метод ниже, чтобы обнаружить поиск. Вы можете отфильтровать NSArray здесь и перезагрузить таблицу.
-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText{

}

Я бы порекомендовал вам пройти несколько основных уроков по разработке под iOS, прежде чем углубляться. Всего наилучшего, и я надеюсь, что это поможет вам...

Скриншот

Другие вопросы по тегам