Как использовать UISearchDisplayController из контроллера внутри контроллера UITabBar?

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

Вопрос

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

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

Заранее благодарю вас.

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

Решение 3

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

странный

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

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

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

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

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.

Еще одно возможное решение, которое работает для меня, — это инициализировать UITableViewController с помощью initWithNibName:bundle:

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

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

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