6

У нас есть панель поиска в заголовке таблицы. Когда пользователь дважды набирает его на iOS 7, он исчезает. Кто-нибудь есть предложения, что мы делаем неправильно?Двойной кран UISearchBar с делегатом поиска в iOS 7 заставляет UISearchBar исчезнуть

+0

Проходит ли он под панелью навигации? У меня есть панель поиска на несколько просмотров и отлично работает. – User382

+0

Я тоже получаю ту же проблему. Я попытался удалить следующие строки из кода. self.edgesForExtendedLayout = UIRectEdgeNone; self.navigationController.navigationBar.translucent = NO; Решает проблему. Но интерфейс нарушается. – Priya

ответ

9

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

- (void)searchDisplayControllerDidEndSearch:(UISearchDisplayController *)controller 
{ 
    self.searchingFetchedResultsController = nil; 
    if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1) { 
     [self.tableView insertSubview:self.searchDisplayController.searchBar aboveSubview:self.tableView]; 
    } 
    return; 
} 

Надеюсь, это поможет.

+0

У меня тоже такая ошибка. –

+0

благодаря Прия, что, кажется, работает так, в основном: - (Недействительными) searchDisplayControllerDidEndSearch: (UISearchDisplayController *) контроллер { если (IS_IOS7_OR_GREATER) { [self.tableView insertSubview: self.searchDisplayController.searchBar aboveSubview: self.tableView]; } } –

+0

Удивительно, но это действительно помогло, однако, грязное решение, и мне действительно не нравится, что я должен его использовать. Проблема возникает, когда пользователь снова забирается в уже оживляемое окно поиска, где другой ответчик получает пустую таблицу результатов в searchDisplayController, заставляя ее немедленно закрыть. – igraczech

7

(я отправил это же ответ на Troubles with UISearchBar \ UISearchDisplayViewController, который, кажется, как дубликат этого вопроса.)

я столкнулся с теми же проблемами, и заметил, что searchDisplayControllerDidEndSearch был вызываются дважды. В первый раз супервизор self.searchDisplayController.searchBar - это UITableView, а во второй раз он по-прежнему UIView.

С ответом Priya, я беспокоиться о непреднамеренных последствиях или ненужных накладных расходах от повторной установки подвида каждый времени поиска бара дважды постучали, и я также беспокоиться о том, что разрыве с будущей версиями IOS. К счастью, мы можем воспользоваться SuperView странности, как это:

- (void)searchDisplayControllerDidEndSearch:(UISearchDisplayController *)controller { 
    if (self.tableView != self.searchDisplayController.searchBar.superview) { 
     [self.tableView insertSubview:self.searchDisplayController.searchBar aboveSubview:self.tableView]; 
    } 
} 

Если бы я должен был догадаться, что происходит, то UISearchBar автоматически создает временный UIView как его надтаблицы, когда она активна - это вид, представляемый при поиск выполняется. В то время как UISearchBar уволен, супервизор возвращается к UITableView, который он имел до этого, , если не был уволен так быстро, что он никогда не был правильно инициализирован, и в этом случае он очищается неправильно, а UITableView никогда не получает UISearchBar назад как его ребенок.

Это решение по-прежнему не идеальное, и я думаю, что Apple должна делать что-то другое в своих приложениях, потому что их панель поиска UX чувствует себя немного лучше. Я думаю, было бы лучше не обрабатывать второй кран в первую очередь, пока не будет готов UISearchBar. Я попытался использовать другие методы UISearchBarDelegate для этого, но я не смог найти подходящий крючок, чтобы переопределить текущее поведение.

+1

Просто наткнулся на эту ошибку. Что делать, если вы проверяете, является ли «окно» нулевым? Таким образом, вы знаете, что это не в иерархии представлений, и вам не нужно жестко кодировать проверку равенства. –

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