UITextField: текст, введенный программно, но не видимый в текстовом поле - PullRequest
0 голосов
/ 27 февраля 2010

У меня странное поведение, которое проявилось только на прошлой неделе. Я не использую IB, все элементы управления созданы в коде.

У меня есть текстовое поле с активной клавиатурой. При первой загрузке текстового поля и использовании клавиатуры все работает нормально. Во второй раз, когда я его использую, напечатанный текст не отображается в текстовом поле. Тем не менее, текст находится в текстовом поле программно. Например, я могу использовать его для выполнения поиска. Когда клавиатура закрывается, появляется текст.

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

Я использую Three20, но в соответствии с http://groups.google.com/group/three20/browse_thread/thread/d7c4bc1ee2f9590d#, Xcode подозревается в возникновении проблемы. Я видел поведение двух разных маков, один из которых работал со Snow Leopard (10.6), а другой - с Leopard (10.5).

Вот как выглядит проблема в Xcode:

iPhone

Это не очевидно, но в этом поле поиска есть текст. Обратите внимание, что текст заполнителя не отображается. Однако, если я нажму Search, код будет выполнен с введенным текстом.

Вот как приложение отображается в симуляторе:

Screenshot XCode

Ответы [ 2 ]

2 голосов
/ 27 февраля 2010

Я наконец нашел причину.

Я вызываю [textField becomeFirstResponder] в функции, вызываемой из loadView. Но я перемещаю его на viewDidAppear и все работает хорошо ...

1 голос
/ 27 февраля 2010

Я видел, как это происходит с текстовыми полями и аффинными преобразованиями. Если вы вращаете текстовое поле, используя преобразование, текст появляется в, казалось бы, случайной части суперпредставления. Если вы используете преобразование для перемещения текстового поля, чтобы освободить место для клавиатуры, вы можете отделить встроенный текстовый редактор от самого поля. Это также объясняет, почему текст находится в коде, потому что текстовый атрибут текстового поля не зависит от визуального макета пользовательского интерфейса.

...