Как имитировать поведение UISearchBar в Safari в iOS - программирование

Как имитировать поведение 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 серая вещь покрывает весь экран, и клавиатура не отображается (она сразу исчезла).

Может ли кто-нибудь помочь? Спасибо.

4b9b3361

Ответ 1

Мне дважды приходилось делать очень похожий пользовательский интерфейс к тому, что вы описываете, а недавнее - ближе к Twitter для поведения iOS 7 UISearchBar. Если вы хотите отобразить UISearchBar внутри UINavigationBar, забудьте об этой настройке в целом, потому что вы, скорее всего, столкнетесь с блокпостами, например (хотя он исправлен Apple).

Подделайте это вместо этого. Скройте панель навигации в UIViewController и используйте UIView с высотой 64 для iOS 7 или 44 для iOS 6 и поместите ее сверху, чтобы она выглядела как панель навигации. Добавьте UISearchBar внутри него, как обычный subview, а затем оставьте его как хотите в методах UISearchBarDelegate.