Используйте UISearchDisplayController в качестве суперкласса - PullRequest
1 голос
/ 23 июня 2011

Я приложил много усилий для создания надежного UITableViewController с пользовательскими ячейками.Теперь я хочу создать отдельный UITabbarItem, который использует этот UITableViewController внутри UISearchDisplayController.

Придерживаясь принципов проектирования ОО, я предполагаю, что при определении UISearchDisplayController я бы создал подкласс исходного UITableViewController.

@interface SearchViewController : CustomTableViewController
{
    NSArray         *listContent;           // The master content.
    NSMutableArray  *filteredListContent;   // The content filtered as a result of a search.

    // The saved state of the search UI if a memory warning removed the view.
    NSString        *savedSearchTerm;
    NSInteger       savedScopeButtonIndex;
    BOOL            searchWasActive;
}

Однако этот подход вообще не работает - ячейки вообще не обновляются в SearchViewController, а методы делегата UITableView, похоже, не дают эффекта (например, строки не изменяются в размере).

Итак, у меня есть несколько вопросов:

  1. Правильный ли это способ, если да, то как мне обновить listContent и FilterListContent из суперпредставления.

  2. Было бы лучше просто добавить UISearchBar в исходное окно поиска и при необходимости скрыть его?

1 Ответ

0 голосов
/ 24 июня 2011

Я не думаю, что вы можете создать подкласс UISearchDisplayController и заставить его работать правильно. Он делает много вещей в методах, которые не являются публичными, поэтому вы не сможете переопределить их с правильным поведением.

Однако вы можете использовать встроенный UISearchDisplayController с вашими пользовательскими ячейками таблицы в результатах поиска, как есть. Вам необходимо инкапсулировать создание и настройку пользовательских ячеек так, чтобы они работали в любом табличном представлении, просто переопределив -... cellForRowAtIndexPath (это стандартный метод отображения пользовательских данных в табличном представлении). Убедитесь, что контроллером является UISearchDisplayDelegate, и он будет использовать этот метод для создания строк в списке поиска.

Чтобы установить пользовательскую высоту, установите

- (void)searchDisplayController:(UISearchDisplayController *)controller willShowSearchResultsTableView:(UITableView *)searchTableView

, чтобы установить rowHeight в searchTableView.

...