Проблемы с UITextField в iOS 5 из-за изменения UITextFieldBorderStyle во время выполнения

#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 не исправит ошибку.