Результат поиска UISearchDisplayController имеет другую макет и поведение ячейки, чем поиск в таблице

StackOverflow https://stackoverflow.com/questions/8333532

Вопрос

Я использую раскадровку. У меня есть UitableView с одной ячейкой прототипа. Эта ячейка стиля «субтитра». Я добавил переход из ячейки к подробному представлению. Поэтому, когда пользователь нажимает на ячейку, он откроет соответствующий редактор ... все работает отлично.

Теперь я добавил UISearchDisplayController A Uisearchbar, реализовал делегатов. Это работает очень хорошо.

Но в таблице результатов поиска ячейки имеют стиль «по умолчанию» и не являются Tapbable. Что мне нужно сделать, чтобы получить таблицу результатов, выглядящую и ведя себя как таблица «без изучения»?

Это было полезно?

Решение 2

Нашел проблему ...

Метод

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

Вытащил ячейку из TableView, которая находится в результате не в том, что TableView из раскадровки, а ResultTableView из SearchDisplayController.

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

Другие советы

Я хотел бы внести свой вклад в ответ № 1 это то, что я сделал, и это сработало для меня

в методе

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

вместо назначения ячейки из таблицы параметров

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

Назначьте его непосредственно из TableView на представление, чтобы вы должны заменить это

// UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

с этим

 UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];

Я использовал iOS 7.0 и Xcode 5.0. Я обнаружил, что контроллер отображения поиска использует тот же макет таблицы, что и контроллер представления делегата. Все, что вам нужно сделать, это судить, является ли текущий обзор TableView TableView Controller View или обзор таблицы Table Controller поиска. Но не забудьте добавить предложение

tableView.rowHeight = self.tableView.rowHeight;

В следующем фрагменте кода:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// Return the number of rows in the section.
if (tableView == self.searchDisplayController.searchResultsTableView)
{
    tableView.rowHeight = self.tableView.rowHeight;//very important!
    return [self.searchResults count];
}
else
{
    ...
    return ...;
}
}

Если вы забудете реализовать это предложение, то строка представления таблицы отображения поиска такая же высока, как строка по умолчанию, что заставляет вас думать, что она не похожа на таблицу «без исследования».

Есть возможный ответ на это здесь. Анкет Это может не сработать полностью для вас, но, как я объяснил, UISearchDisplayController создает представление таблицы.

Проверьте документацию, и вы сможете лучше понять ее, но в нем говорится:

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

В моем случае UISearchDisplayController использовал тип правой ячейки (пользовательский), но высота ячейки была неправильной, поэтому мне пришлось использовать

(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 

Метод, чтобы исправить это.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top