UITextField медленно инициализируется?

Я программно помещаю около 100 UITextFields в UIScrollView для сложного приложения ввода данных (не спрашивайте....блетч), и я обнаружил, что создание всех этих UITextFields занимает слишком много времени... что-то вроде 4 секунд .

Есть ли лучший или более быстрый способ программно создать такое количество объектов пользовательского интерфейса?

Например, было бы разумнее загрузить Xib/Nib и попытаться модифицировать его по мере необходимости?

Спасибо.


person 165c    schedule 21.08.2011    source источник


Ответы (3)


Вы думали о том, чтобы просто создать пару UITextField и повторно использовать их, как только они исчезнут с экрана, так же, как UITableView делает с ячейками?

person Christian Schnorr    schedule 29.04.2012

Ой, 100 текстовых полей для ввода данных — это жестко. Но я знаю проблему, когда клиент настаивает на очень глупой идее.

Вернемся к теме: проблема не в фактическом поколении вашего UITextFields. Это то, как касание какао обрабатывает просмотры. Просмотры ужасно медленные. Ваша идея с перьями еще хуже, потому что они на самом деле еще медленнее.

Единственный способ избежать этого — просто не рисовать (не добавлять) много видов. Просто добавьте представления, которые в данный момент находятся в видимой области прокрутки, и удалите остальные.
Какао-тач на самом деле уже имеет для этого очень хороший контроль, он называется UITableView. ;)

Apple создала шаблон удаления из очереди/повторного использования в UITableView именно по этим причинам.
Поэтому я предлагаю вам использовать представление таблицы вместо представления прокрутки с настраиваемыми ячейками (чтобы избежать разделителей и т. д.) и удалить из очереди/повторно использовать эти ячейки и заполните их UITextFields, которые вы где-то храните внутри массива.

person yinkou    schedule 29.04.2012

моя первая идея - написать таймер и загружать их 1 на 1 (или больше) небольшими шагами, чтобы пользовательский интерфейс не зависал (это все равно займет 4 секунды, но, по крайней мере, пользователь может вводить в загруженные текстовые поля)

вот как сделать таймер

person skytz    schedule 29.04.2012