Как использовать UISearchDisplayController из контроллера в контроллере UITabBar? - PullRequest
7 голосов
/ 11 августа 2009

У меня есть контроллер UITabBar, управляющий несколькими контроллерами (используя SDK 3.0). Одним из них является контроллер tableView, и мне нужно предоставить возможность поиска, используя UISearchDisplayController. Весь мой код основан на примере Apple TableSearch. Однако при нажатии на вкладку появляется контроллер tableView, показывающий его связанное содержимое, но не отображается панель поиска. Я проверил xib в IB, чтобы убедиться, что все выходы установлены правильно, но независимо от того, что я пробую, self.searchDisplayController всегда равен nil, и строка поиска не появляется.

На практике я скопировал MainView.xib из примера TableSearch и установил для класса владельца файла правильный класс контроллера для вкладки. Выходы установлены, как в примере MainView.xib. Я пропускаю какой-то важный шаг или делаю что-то не так?

Заранее спасибо.

Ответы [ 7 ]

5 голосов
/ 22 января 2010

У меня была та же проблема, и я наткнулся на это решение ...

Если ваш контроллер табличного представления (например, UISearchDisplayController) вложен в панель вкладок или контроллер навигации с помощью Interface Builder, вам необходимо установить «Имя пера» в окне «Инспектор атрибутов».

Имя пера будет тем, которое содержит табличное представление и имеет в качестве владельца файла контроллер (например, UISearchDisplayController).

1 голос
/ 09 мая 2012

Недавно я узнал, что могу загружать файлы NIB с помощью [[MyViewController alloc] initWithNibName:nil bundle:nil];, когда файл NIB имеет то же имя, что и класс (т.е. MyViewController.xib). Оказывается, инициализация этого способа приводит к тому, что 'UISearchBar and UISearchBarDisplayController` не отображается. Когда я инициализировал контроллер представления, введя имя класса, моя строка поиска появилась правильно. Сначала я думал, что это как-то связано с тем, как я представлял контроллер представления, но был рад, что это не так.

PGWSearchViewController *searchVC = [[PGWSearchViewController alloc] initWithNibName:@"PGWSearchViewController" bundle:nil];

searchVC.modalPresentationStyle = UIModalPresentationFullScreen;
searchVC.modalTransitionStyle = UIModalTransitionStyleCoverVertical;

[self presentViewController:searchVC animated:YES completion:^{ }];

Используется iOS SDK 5.1 и XCode 4.3.1.

1 голос
/ 03 мая 2011

Tomtrapeze имеет правильный ответ, если ваш nib-файл содержит UITableViewController. Но если вы загружаете UITableViewController в коде - например, помещаете его в стек UINavigationController - решение немного другое.

При инициализации UITableViewController или подкласса необходимо использовать форму инициализатора -initWithNibName: bundle: и указать имя вашего файла пера. Кроме того, вы можете использовать стандартный -initWithStyle: initializer и вручную установить свойство nibName перед загрузкой представления.

Если свойство nibName не установлено при загрузке представления, UITableViewController не будет использовать обычную логику поиска пера UIViewController. Вместо этого он просто загрузит стандартный UITableView.

1 голос
/ 17 января 2010

У меня была похожая проблема

Чтобы решить, мне пришлось сделать еще один шаг, чтобы не прощать ответ В моем главном перо

1) создать UITabController 2) Затем я перетащил UINavigational Controller в контроллер вкладок. 3) Затем вытащил UITableViewController в NavigationalController как ребенок 4) Затем изменил (3) класс на MyTableWithSearchBarViewController в инспекторе - проверьте правильность имени пера и при необходимости измените его в инспекторе 5) Затем мне пришлось удалить tableView, который автоматически создается IB на шаге (3). Только тогда строка поиска будет отображаться правильно ...

Если на шаге 3 я перетащил другой контроллер на сцену или оставил там tableView, то он будет отображать только таблицу, а не строку поиска

странно

1 голос
/ 30 августа 2009

Хорошо, я нашел, как решить это. В моем случае проблема была связана с тем, что я использовал контроллер, встроенный в UITabBarController, в качестве одной из его управляемых вкладок (т.е. как дочерний элемент).

Удаление контроллера из UITabBarController, затем добавление UINavigationController в UITabBarController и, наконец, помещение моего контроллера в качестве дочернего для UINavigationController полностью решило проблему.

Я не понимаю, почему это так (в документации нет соответствующей информации, как это часто бывает); однако, теперь это работает как шарм. С уважением.

1 голос
/ 30 августа 2009

У меня тоже есть эта проблема :( Строка поиска скрывается за таблицей?

@ непрощенный, ты пробовал это ...?

searchBar = [[UISearchBar alloc]initWithFrame:CGRectMake(0, 0, 320, 40)]; 
[self.tableView setTableHeaderView: searchBar];

Это вручную создает панель поиска, и она работает. Но я делаю глупую ошибку в IB, что SearchBar не появляется, даже если мои соединения идеальны. : - (

Обновите этот пост, если получите ответ ...

0 голосов
/ 27 декабря 2011

Другое возможное исправление, которое работает для меня, - это инициализация UITableViewController с initWithNibName: bundle:

SearchEntryTableViewController* searchEntryTableViewController = [[SearchEntryTableViewController alloc]initWithNibName:@"SearchEntryTableViewController" bundle:nil];

Вложение UITableViewController в UINavigationController перед помещением его в UITabBarController не решает проблему для меня ...

...