2015-07-07 4 views
5

Я реализовал UISearchController со своей панелью поиска в панели навигации, и я хотел бы активировать панель поиска при загрузке представления. Когда я говорю «active», я имею в виду, что клавиатура появляется, и пользователь может ввести свой поиск, не коснувшись панели поиска.Сделать панель поиска UISearchController автоматически активной

Я инициализируется в UISearchController со следующим кодом:

- (void)viewDidLoad 
{ 
    self.searchController = [[UISearchController alloc] initWithSearchResultsController:nil]; 
    [self.searchController setSearchResultsUpdater:self]; 
    [self.searchController setDimsBackgroundDuringPresentation:NO]; 
    [self.searchController setHidesNavigationBarDuringPresentation:NO]; 
    [self.navigationItem setTitleView:self.searchController.searchBar]; 

    [self setDefinesPresentationContext:YES]; 

    [self.searchController.searchBar setDelegate:self]; 
    [self.searchController.searchBar setShowsCancelButton:YES]; 
    [self.searchController.searchBar setPlaceholder:@"City or Airfield"]; 

    [self.searchController.searchBar sizeToFit]; 
} 

Я пытался сделать мой поиск контроллер активен, вызов [self.searchController.searchBar becomeFirstResponder] и непосредственно вызывать searchBarSearchButtonClicked, но ничего не работает.

+0

является searchController код в viewDidLoad –

+0

да это (я редактировал пост) – Nonouf

+0

Просто чтобы убедиться, что с вашим текущим кодом при нажатии на панель поиска все работает нормально ... правильно? И где вы положили '[self.searchController.searchBar статьFirstResponder]' в viewDidLoad? – SanitLee

ответ

7

Try вызова

[self.searchController setActive:YES] 

перед тем

[self.searchController.searchBar becomeFirstResponder] 

Если выше не работает, попробуйте что-то вроде этого:

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    ... 
    [self initializeSearchController]; 
    .... 
} 

- (void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 
    [self.searchController setActive:YES]; 
    [self.searchController.searchBar becomeFirstResponder]; 
} 

- (void)initializeSearchController { 
    self.searchController = [[UISearchController alloc] initWithSearchResultsController:nil]; 
    self.searchController.searchResultsUpdater = self; 
    self.searchController.dimsBackgroundDuringPresentation = NO; 
    self.searchController.delegate = self; 
    self.searchController.searchBar.delegate = self; 
    [self.searchController.searchBar sizeToFit]; 

    [self.tableView setTableHeaderView:self.searchController.searchBar]; 
    self.definesPresentationContext = YES; 
} 
+0

У меня все тот же результат. Я не понимаю, что depsite тот факт, что я активировал YES, когда я печатаю 'self.searchController.active', по-прежнему установлен в NO. – Nonouf

+0

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

+0

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

5

Чтобы активировать строку поиска:

- (void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 
    [self.searchController setActive:YES]; 
} 

«startFistResponder» можно вызвать, чтобы клавиатура отображалась только при загрузке UISearchController.

- (void)didPresentSearchController:(UISearchController *)searchController 
{ 
    [searchController.searchBar becomeFirstResponder]; 
} 
+0

Пожалуйста, не добавляйте простой код в качестве ответа. Объясните, как ваш ответ решает проблему OP. –

+0

Обновлено с объяснением. –

+0

Это должно быть отмечено как правильный ответ. – Joel

1

Кроме того, делать то, что предложили другие пользователи, я также сделал следующее, и она работала:

searchController.definesPresentationContext = YES;

Смежные вопросы