Невозможно выбрать результат поиска в UISearchController - PullRequest
0 голосов
/ 28 июня 2018

У меня есть список tableView в моем приложении IOS. Я хочу найти свой список tableView с помощью UISearchController. По умолчанию список будет отображаться правильно.

Когда я активирую контроллер поиска (нажмите на UISearchController), мой существующий список исчезнет, ​​и когда я введу связанные ключевые слова, результат будет отображен соответствующим образом.

Но когда я проверяю связанный результат поиска, searchController деактивируется и возвращается к списку по умолчанию.

Есть идеи?

- (void)viewDidLoad {
    self.searchController = [[UISearchController alloc] initWithSearchResultsController:nil];
    self.searchController.searchResultsUpdater = self;
    self.searchController.delegate = self;

    self.searchController.searchBar.delegate = self;

    self.searchController.searchBar.barTintColor = ThemeLightGrayColor;

    self.searchController.hidesNavigationBarDuringPresentation = NO;

    [self.searchController.searchBar.layer setBorderColor:[UIColor colorWithRed:229.0/255 green:229.0/255 blue:229.0/255 alpha:1].CGColor];
    [self.searchController.searchBar setPlaceholder:@"Search"];
    [self.searchController.searchBar.layer setBorderWidth:0.5];
    [self.searchController.searchBar setKeyboardType:UIKeyboardTypeDefault];
    [[UITextField appearanceWhenContainedInInstancesOfClasses:@[[UISearchBar class]]] setDefaultTextAttributes:@{ NSFontAttributeName: [UIFont fontWithName:@"Bitter" size:14]}];

    [self.searchController.searchBar sizeToFit];


    _searchResultArr=[NSMutableArray array];
    _tableView.tableHeaderView = ({
        UIView *view = [[UIView alloc] init];
        view.frame = CGRectMake(0, DCNaviH, 0, self.searchController.searchBar.frame.size.height + 50);
        _segPromotion = [[UISegmentedControl alloc] initWithItems:@[@"All",@"Near Me",@"Coming Soon"]];
        _segPromotion.selectedSegmentIndex = 0;
        _segPromotion.backgroundColor = ThemeWhiteColor;
        _segPromotion.frame = CGRectMake(10, self.searchController.searchBar.frame.origin.y+5 + self.searchController.searchBar.frame.size.height , ScreenW-20, 30);
        [_segPromotion setTitleTextAttributes:@{NSFontAttributeName :  [UIFont fontWithName:@"Bitter" size:13],NSForegroundColorAttributeName: ThemeDarkBlueColor } forState:UIControlStateNormal];
        [_segPromotion setTitleTextAttributes:@{NSFontAttributeName : [UIFont fontWithName:@"Bitter" size:13],NSForegroundColorAttributeName : ThemeWhiteColor} forState:UIControlStateSelected];
        [_segPromotion addTarget:self action:@selector(SegmentChangeViewValueChanged:) forControlEvents:UIControlEventValueChanged];

        [view addSubview:self.searchController.searchBar];
        [view addSubview:_segPromotion];
        view;
    });
    [self.view addSubview:_tableView];
}


- (void)updateSearchResultsForSearchController:(UISearchController *)searchController
{
    NSString *searchString = searchController.searchBar.text;
    [self searchForText:searchString];
    [self.tableView reloadData];
}



- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
    [self updateSearchResultsForSearchController:self.searchController];
}

- (void)searchBar:(UISearchBar *)searchBar selectedScopeButtonIndexDidChange:(NSInteger)selectedScope
{
    [self updateSearchResultsForSearchController:self.searchController];
}


- (void)searchForText:(NSString *)searchString
{
    [self filterContentForSearchText:searchString
                               scope:[self.searchBar scopeButtonTitles][self.searchBar.selectedScopeButtonIndex]];
}

1 Ответ

0 голосов
/ 28 июня 2018

Что вам нужно сделать, это добавить self.searchController.obscuresBackgroundDuringPresentation = NO; при инициализации searchController.

Это потому, что, поскольку вы использовали [[UISearchController alloc] initWithSearchResultsController:nil], результаты будут отображаться в одном контроллере представления (из-за параметра nil). По этой причине, если для obscuresBackgroundDuringPresentation установлено значение YES (по умолчанию это так), область результатов не будет сенсорной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...