UISearchDisplayController с UITableViewController - PullRequest
7 голосов
/ 09 июля 2011

У меня есть UITableViewController, в котором я добавил UISearchBar в качестве tableHeaderView с помощью Interface Builder.Затем я добавил UISearchDisplayController в перо и настроил все соединения (delegate, searchResultsDelegate, searchContentsController, searchResultsDataSource, все подключены к UITableViewController).Затем я реализовал все методы делегата и источника данных в своем коде.

Это работает как чудо, за исключением странной ошибки: иногда представление таблицы результатов поиска не прокручивается, и я вижу индикатор вспышкиосновной таблицы за ней.Я NSLog'd searchResultsTableView и, по-видимому, это подпредставление основной таблицы, и я думаю, что это причина проблем касания, которые я описал ранее.

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

Обновление : я нашел этот образец , который использует UISearchDisplayController с UITableViewController, и, очевидно, представление таблицы поиска также добавляется в представление основной таблицы.,Так что теперь я не думаю, что это моя проблема.

Дело в том, что я не могу найти какой-либо существенной разницы между тем, что я делаю, и тем, что делает этот образец.Я просто добавляю UISearchBar в качестве UITableView заголовка в UITableViewController и добавляю UISearchDisplayController к нему ... Это похоже на то, как iOS путается между основной таблицей и таблицей поиска, когда я пытаюсь прокрутить.У вас есть идеи?

Обновление : Добавлена ​​награда в 200 повторений. Пожалуйста, отвечайте, только если вы знаете, о чем говорите.

Ответы [ 4 ]

9 голосов
/ 18 июля 2011

Это был дополнительный self.tableView.scrollEnabled = YES, который вызывался, как только запрос данных поиска был закончен.Надеюсь, что это поможет кому-то с такой же проблемой в будущем.

3 голосов
/ 12 июля 2011

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

Здесь searchDisplaycontroller объединяет панель поиска и представление таблиц, которые показывают результат.данные в табличном представлении, поэтому для них не требуется отдельное табличное представление.

Хотя при использовании UISerarchBar необходимо иметь как минимум один UITableView, который может отображать результаты в представлении.И здесь вы можете увидеть результат, даже не добавляя SearchDisplayController для просмотра.

1 голос
/ 14 ноября 2011

Я думаю, что вы можете попробовать добавить IBOutlet UISearchDisplayController в ваш класс и подключить его к вашему SearchdDisplayController в nib-файле.Мне забавно, что этот контроллер searchdisplay в вашем перо автоматически подключил его к стандартному выходу serachdisaplaycontreoller в инспекторе.

0 голосов
/ 12 июля 2011

Контроллер панели поиска использует свое собственное табличное представление, которое добавляется поверх вашего собственного. Если вы установите делегат и dataSource UISearchDisplayController в свой UITableViewController, то контроллер табличного представления должен различать два табличных представления в его методах делегата. Если вы делаете это неправильно, это может быть причиной вашей ошибки.

Другими словами:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    if (tableView == self.tableView) {
        return number of rows in data model;
    } else {
        perform the search query;
        return number of rows in search query;
    }
}

Вы делаете нечто подобное для всех методов делегата и источника данных.

Я не уверен на 100%, что именно это вызывает твою проблему, но, не видя больше источника, трудно сказать.

...