IPhone - панель поиска нескольких текстовых полей

Я реализую поиск по ключевым словам на основе местоположения. Если кто-нибудь видел панель поиска Yelp, это то, что я пытаюсь сделать. Как правило, после нажатия строки поиска я хочу предоставить одно текстовое поле для ключевого слова, а другое для местоположения. Какой элемент пользовательского интерфейса я должен подкласса? Как я могу это сделать?

Ответ 1

Я тоже сделал подобное приложение, довольно давно.
Что я сделал в своем приложении, я последовал этим шагам (я просто даю краткое описание, а не часть кода):

Начальный вид:

  • Я использовал панель поиска, вставленную в панель навигации. (Я сделал это программно в viewDidLoad моего класса).
  • В моем xib файле этого класса я разместил представление сверху и в него поместил два UITextFields один под другим. Я сделал это представление скрытым и сдвинул свои координаты y на высоту представления, чтобы они стали -(viewHeight).

Функциональная часть

  • Как только пользователь коснется строки поиска, помещенной в панель навигации, я сделал ее скрытой, скрытой от просмотра с текстовыми полями и сдвинув координаты y до тех пор, пока они снова не станут 0.

  • В методах делегата панели поиска - (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar я вернул NO, сделал часть анимации (упомянутую на предыдущем шаге), прежде чем возвращать NO из этого метода.

  • Я сделал свое первое текстовое поле первым ответчиком, чтобы клавиатура появилась автоматически.

  • Теперь, когда я заполняю данные в обоих текстовых полях, я отменил анимацию и поместил данные в текстовые поля в панель поиска.

Надеюсь, что это поможет.

Ответ 2

Реализация Yelp выглядит как пользовательский вид с двумя объектами UITextField, с трансляцией и масштабированием анимации, чтобы он выглядел увеличенным сверху. После завершения анимации в иерархию добавляется представление таблицы. Клавиатура вызывается, создавая одно из текстовых полей, отвечающих первым.

BTW - вообще говоря, объединение элементов UI вместе является предпочтительным для подкласса.