Как имитировать поведение UISearchBar в Safari в iOS
У меня есть UISearchBar
в titleView
панели навигации (это похоже на рисунок ниже), и я хочу, чтобы он работал так же, как в браузере Safari.
У меня недостаточно репутации для отправки изображений, здесь ссылка
Первое изображение
![enter image description here]()
Второе изображение
![enter image description here]()
Я хочу достичь:
- В нормальном состоянии панель навигации содержит 2 левую и правую кнопки,
UISearchBar
и кнопку очистки внутри этой строки поиска (выглядит как первое изображение с 2 кнопками добавления).
- В состоянии поиска
view
заменяется на другое view
, а когда он отклоняется, view
возвращается в исходное состояние.
- Работает как в iOS 6, так и в 7
Я знаю, что это можно сделать, используя UISearchDisplayController
, но это не сработает. Здесь мой код:
.h: реализовать TableView DataSource/Delegate, UISearchDisplayDelegate, UISearchBarDelegate
ого
-(void) viewDidload
{
//Add left, right buttons
self.leftButton = [[UIBarButtonItem alloc] init];
[self.leftButton setStyle:UIBarButtonItemStylePlain];
[self.leftButton setTitle:@"Button"];
self.navigationItem.leftBarButtonItem = self.leftButton;
self.rightButton = [[UIBarButtonItem alloc] init];
[self.rightButton setStyle:UIBarButtonItemStylePlain];
[self.rightButton setTitle:@"Button"];
self.navigationItem.rightBarButtonItem = self.rightButton;
self.searchBar = [[UISearchBar alloc] initWithFrame:self.navigationController.navigationBar.bounds];
if (DEVICE_IS_IOS7) {
self.searchBar.searchBarStyle = UISearchBarStyleMinimal;
}
self.navigationItem.titleView = self.searchBar;
self.searchBar.delegate = self;
//----------------
self.searchController = [[UISearchDisplayController alloc] initWithSearchBar:self.searchBar contentsController:self];
self.searchController.delegate = self;
self.searchController.searchResultsDataSource = self;
self.searchController.searchResultsDelegate = self;
}
/*
table implementation
*/
В iOS 7 view
UISearchDisplayController
(серый) не охватывал основной вид, а resultTable
не перезагружал данные, даже смог фильтровать строку поиска. (Мне пришлось использовать KVO для его отображения)
В iOS 6 серая вещь покрывает весь экран, и клавиатура не отображается (она сразу исчезла).
Может ли кто-нибудь помочь?
Спасибо.
Ответы
Ответ 1
Мне дважды приходилось делать очень похожий пользовательский интерфейс к тому, что вы описываете, а недавнее - ближе к Twitter для поведения iOS 7 UISearchBar
. Если вы хотите отобразить UISearchBar
внутри UINavigationBar
, забудьте об этой настройке в целом, потому что вы, скорее всего, столкнетесь с блокпостами, например (хотя он исправлен Apple).
Подделайте это вместо этого. Скройте панель навигации в UIViewController
и используйте UIView
с высотой 64
для iOS 7 или 44
для iOS 6 и поместите ее сверху, чтобы она выглядела как панель навигации. Добавьте UISearchBar
внутри него, как обычный subview, а затем оставьте его как хотите в методах UISearchBarDelegate
.