Проблема с UISearchBar + UITableView + UINavigationController

Это продолжение этого вопроса: UINavigationController + UITableView + UISearchBar + UISplitViewController

Есть ли способ сделать так, чтобы вышеприведенное решение не приводило к отфильтрованию результатов? В моем случае вы видите, что весь список всплывает (во время анимации), когда вы деактивируете поиск в viewWillDisappear, и если вы делаете это в viewDidDisappear, то кажется, что уже слишком поздно, и следующий вид снова находится ниже / поверх бар. Любое другое решение?


person Philippe Sabourin    schedule 07.08.2010    source источник
comment
Здесь много факторов. Как вы структурируете свой поиск? Как вы обрабатываете результаты поиска? Делаете ли вы что-нибудь особенное с вашим методом didSelectRowAtIndexPath:? Пожалуйста, опубликуйте код (скриншоты из предыдущего помогают, но не предоставляют достаточно информации).   -  person MishieMoo    schedule 16.09.2010


Ответы (2)


Хорошо, у меня есть твой ответ-

Вот шаги, которые у меня сработали [содержащие некоторый псевдокод]:

1) Поскольку вы выполняете поиск, вы наверняка уже переопределяете ShouldReloadForSearch- Поэтому просто добавьте фрагмент кода, который сохраняет / сохраняет forSeachString.

2) Это может немного отличаться в зависимости от вашего приложения, но суть этого шага заключается в том, что вам нужно очистить сохраненную строку поиска [установленную в ноль], если результаты поиска не загружены. Я сделал это в своем UITableViewSource. У меня есть 2 конструктора - один для полного набора данных, а другой - для отфильтрованного набора данных [результаты поиска]. Поэтому я просто установил для него значение null в своем конструкторе полного набора данных. Да, вы, без сомнения, могли бы сделать это по-другому, но я сделал это именно так.

3) Затем сделайте так, как указано в исходном «ответе», и вызовите SetActive - [self.searchDisplayController setActive:NO];. Они выступали за то, чтобы сделать это вместо ViewDidAppear. Я этого не делал ... Я сделал это сразу после того, как нажал следующий UIViewController в моем RowSelected переопределении.

4) Наконец, в вашем UIViewController, к которому прикреплен UISearchDisplayController - проверьте сохраненную строку поиска и, если она существует, выполните следующие действия: 1) снова вызовите SetActive, НО на этот раз с истинным параметром, т.е. _5 _... затем 2) установите searchBar к сохраненному значению строки поиска. Я сделал это в переопределении ViewWillAppear.

Короче говоря ... это сработало для меня И поддерживает результаты поиска. Ключом является установка текста searchBar на шаге 4 ... это эффективно сохраняет фильтр.

Надеюсь, это кому-то поможет

person Pimp Juice McJones    schedule 15.09.2010

В конце концов я исправил это, изменив место отображения панели поиска (вместо того, чтобы переходить через панель навигации, она была привязана к таблице, как в почтовом ящике). Это устранило проблему и сделало приложение более похожим на приложения Apple.

person Philippe Sabourin    schedule 02.11.2010