Запрет UISearchDisplayController от скрытия панели навигации - PullRequest
64 голосов
/ 11 мая 2010

Всякий раз, когда пользователь начинает редактировать панель поиска UISearchDisplayController, контроллер поиска становится активным и скрывает панель навигации представления, представляя представление таблицы поиска. Можно ли предотвратить скрытие навигационной панели UISearchDisplayController без ее повторной реализации?

Ответы [ 15 ]

1 голос
/ 23 августа 2011

Я думаю, что лучшее решение - это реализовать UISearchDisplayController самостоятельно.

Это не так сложно. Вам нужно только реализовать UISearchBarDelegate для вашего UIViewController и включить UITableView для отображения результатов поиска.

0 голосов
/ 29 июля 2015

Просто хотел добавить к стиге ответ.Когда вы отменяете поиск и снова начинаете поиск - таблица результатов поиска не будет реагировать на прикосновения, поэтому вам нужно добавить следующую строку

self.searchResultsTableView.alpha = 1;

Таким образом, обновленный код выглядит следующим образом

 - (void)setActive:(BOOL)visible animated:(BOOL)animated;
 {
    if(self.active == visible) return;
    if (visible) {
        [self.searchContentsController.navigationController setNavigationBarHidden:YES animated:NO];
        [super setActive:visible animated:animated];
        [self.searchContentsController.navigationController setNavigationBarHidden:NO animated:NO];
        self.searchResultsTableView.alpha = 1;
        [self.searchBar becomeFirstResponder];
    } else {
        [super setActive:visible animated:animated];
        [self.searchBar resignFirstResponder];
    }
}
0 голосов
/ 10 февраля 2015

Я добавлял пользовательскую панель навигации на свой ViewController, который скрывался при поиске, быстрое, но не очень хорошее исправление было

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText{
    [self.view addSubview:_navBar];
}

_navBar - это UINavigationBar, добавленный программно, это помогло мне скрыть панель навигации.

0 голосов
/ 15 апреля 2013

Как указал jrc, "отцепить UISearchDisplayController от управления любым UISearchBar", похоже, мне подходит. Если я передаю nil в качестве параметра при создании UISearchDisplayController, панель навигации всегда остается видимой:

searchDisplayController = [[UISearchDisplayController alloc] initWithSearchBar:nil contentsController:self];
0 голосов
/ 08 декабря 2012

@ Павел отлично работает. Однако я пытался вставить это в UIPopoverController, и текст в поле слегка выдвигается, когда текстовое поле панели поиска становится первым респондентом, и это выглядит немного уродливо, поэтому я исправил это, вызвав метод super с animated установлено на NO.

...