Реализация автозаполнения в iPhone UITextField для контактов в адресной книге - PullRequest
3 голосов
/ 08 марта 2010

Я хотел бы иметь UITextField или UITextView, в котором при вводе некоторых данных альтернативы будут выглядеть примерно так же, как при вводе адреса в почтовом приложении, альтернативы будут отображаться вниз и, возможно, коснитесь их, чтобы получить лучший пользовательский интерфейс ввода. . (поскольку нет необходимости вводить полное слово или адрес или номер телефона)

Я знаю, как извлекать данные из инфраструктуры адресной книги, а также как вводить текст в UITextField / UITextView и его делегатах, но я не знаю, какую структуру использовать для извлечения и отображения данных, когда пользователь выполняет его / ее вклад.

Я знаю базовые CoreData, если это имеет значение,

Я надеюсь, что смогу получить помощь.

ОБНОВЛЕНИЕ (2010/3/10): У меня нет проблем с созданием нативного графического интерфейса, но я спрашиваю об алгоритме, знает ли кто-нибудь, какой алгоритм лучше всего подходит для этой вещи? может быть какое-то двоичное дерево? Или я должен просто получать данные из coredata каждый раз?

Спасибо

Игнасио

ОБНОВЛЕНИЕ (2010/03/28): Я был очень занят в эти дни, поэтому я не пробовал UISearchResults, но мне кажется, что это нормально. НО мне интересно, была ли необходимость удаления выигравшего ответа? Я не думаю, что это справедливо, моя репутация пошла на спад, и я не смог увидеть победный ответ. ; (

Ответы [ 2 ]

7 голосов
/ 10 марта 2010

Вам не нужен какой-то продвинутый алгоритм, чтобы делать подобные вещи ... если вы хотите искать в адресной книге, вы можете делать это каждый раз, когда пользователь вводит символ (или как бы часто вам не приходилось искать ). Для этого просто взгляните на класс UISearchDisplayController . Я узнал, как сделать почти то же самое, взглянув на пример приложения Apple TableSearch .

Это приложение выполняет поиск в списке объектов с использованием различных полей («Все», «Устройство», «Рабочий стол», «Портативный») ... чтобы вы могли адаптировать его к полям адресной книги (Имя, Фамилия, Адрес ...). Единственное, что вам нужно изменить - это поиск в адресной книге. Я не знаю точно, чего требуют ваши требования, но это должно быть то, что вам нужно, чтобы это сделать. Если у вас есть какие-либо проблемы с кодом, дайте мне знать ... но этот пример действительно помог мне, так что, надеюсь, он работает для вас.

1 голос
/ 08 марта 2010

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

Для моих нужд это было излишним, потому что для сборки требуется весь проект, а я не хотел весь проект. К тому же, гораздо интереснее попробовать самим:)

Я закончил с нуля и сделал свой собственный:

Я начал с подкласса UIScrollView, который будет содержать различные элементы управления. Я вложил в подкласс UITextField и переопределил «editRectForBounds» для поддержки нескольких строк. Бит, в котором отображаются контакты, - это просто UITableView с цветом фона:

[UIColor colorWithRed:0.92 green:0.92 blue:0.92 alpha:1];

И цвет разделителя:

[UIColor colorWithWhite:0.85 alpha:1];

Это и использование тени делают ее похожей на слегка утопленную под UITextField. Я создаю тень с помощью пользовательского UIView, загружая ее один раз и скрывая при необходимости, но она работает так же хорошо с изображением.

Наконец, я создал формы синей пилюли с помощью пользовательского интерфейса UIView, который может перехватывать «touchsBegan», чтобы знать, когда они должны изменить цвет.

Чтобы добавить их, достаточно просто рассчитать, куда им нужно перейти, и использовать:

[myTextField addSubview:myBlueView];

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

...