#ios #uitextfield #ios5
#iOS #uitextfield #ios5
Вопрос:
У меня внезапно возникли проблемы с некоторыми UITextFields теперь, когда я тестирую на устройствах iOS 5, хотя я создал приложение в iOS 5 SDK и уже допустил ошибку до выпуска.
У меня есть текстовое поле, которое разрешает ввод, и когда вы нажимаете кнопку «заблокировать», оно вызывает:
textField.enabled = NO;
textField.borderStyle = UITextBorderStyleNone;
Поле «скрывается», но по-прежнему действует как функция, важная для приложения.
Затем вы снова нажимаете кнопку «заблокировать», и она вызывает:
textField.enabled = YES;
textField.borderStyle = UITextBorderStyleRoundedRect;
Это отлично работает в 4.2 / 4.3, но в iOS 5 появляется только скошенный контур текстового поля без белого цвета фона.
Setting .backgroundColor исправляет это в iOS 5, но создает уродливый белый квадрат в 4.2 / 4.3.
Я ничего не видел об этих изменениях в документе API diffs, чего мне здесь не хватает?? Заранее спасибо..
Комментарии:
1. Вы включили ARC для своего приложения? Похоже, вы пытаетесь получить доступ к объекту, который был освобожден.
2. да, ARC включен, но это первый раз, когда у меня возникла эта проблема. Я попытался изменить порядок вещей и поместить его перед работающими свойствами, но это ничего не изменило
3. Я испытываю точно такую же проблему! Я только что создал небольшой проект, чтобы изолировать эту проблему без изменения enabled. Я понял, что это проблема с освобождением, но не понимаю, почему. С помощью NSZombieEnabled я обнаруживаю зомби. Странно то, что это происходит только при переключении с
UITextBorderStyleRoundedRect
наUITextBorderStyleNone
. Обратный сбой не происходит, если для начального стиля границы в раскадровке было установлено значение None. Вместо установки начального значения в RoundedRect приложение завершает работу. Похоже, что текстовое поле каким-то образом освобождено.4. @REDMX Есть новости по этому поводу? И у меня вопрос: какую версию XCode вы используете? Вы также используете версию SnowLeopard (сборка: 4C199)? Я подумал, может ли это быть причиной, поскольку он не полностью поддерживает ARC.
Ответ №1:
Если вас устраивает белый фон, я исправил это, закомментировав строку, которая задает цвет фона, и установив для свойства opaque значение NO
//[myTextField setBackgroundColor:[UIColor whiteColor]];
[myTextField setOpaque:NO];
Это решило проблему как для iOS 4.3, так и для iOS 5.0
-Алекс
Комментарии:
1. Работал для меня как на iOS 4.3, так и на iOS5.0
Ответ №2:
userInteractionEnabled
является свойством гораздо более общего UIView
класса и, как таковое, может вести себя не так, как вы ожидали, с подклассами UIControl
, такими как UITextField
. Вместо этого вы должны установить enabled
для свойства NO
значение, чтобы временно отключить элемент управления, который в случае UITextField
будет делать именно то, что вы хотите.
Комментарии:
1. упс — я на самом деле использую свойство .enabled, но ввел его неправильно. Я изменю сообщение, так что, к сожалению, это не решит проблему
2. Ваш сбой никак не связан с настройкой стиля границы или включенного свойства — они оба скаляры. Таким образом, остается само текстовое поле, которое, по всей вероятности, освобождается, как предположил Бартош. Вы пробовали компилировать без ARC в iOS 5?
3. к сожалению, отключение ARC не исправило это
4. Можете ли вы опубликовать объявление для
textField
свойства, а также любой код, который отправляетrelease
ему илиautorelease
?5. Вы также можете показать, как управляется объект, который объявляет
textField
свойство. Возможно, что объект освобождается.
Ответ №3:
Возможное исправление — установить alpha
значение 0.00001
. Это дает вам эффективно скрытые метки, которые все еще могут реагировать на управляющие события.
Комментарии:
1. проблема в том, что мне нужно, чтобы текст был виден так же, как метка
2. В этом случае просто установите
userInteractionEnabled
значениеNO
. Или скопируйтеtext
в фактическийUILabel
(илиUITextView
более подходящий для многострочного текста), который затем отображается.
Ответ №4:
У меня аналогичная проблема, и UITextBorderStyleNone нормально работал в iOS 4.3, но в iOS 5 перестал работать. Я думаю, что это ошибка от Apple, потому что она не работает как на устройстве, так и на симуляторе. Я думаю, что лучше всего здесь переключаться между меткой и текстовым полем по мере необходимости, как предлагает darvids0n, пока Apple не исправит ошибку.