Flex 4.6 TextInput с подсказкой при неправильной работе iOS

На ios TextInput выглядит странно. Следующий код:

        <s:TextInput id="password" width="100%" displayAsPassword="true"
                     needsSoftKeyboard="true" 
                     prompt="Password"  
                     softKeyboardType="default"
                     returnKeyLabel="done"
                     autoCorrect="false"
                     skinClass="spark.skins.mobile.TextInputSkin"
                     />

Когда я выбираю textInput, подсказка исчезает, как и ожидалось, но первый символ выбирается автоматически. При нажатии второй клавиши первый символ удаляется. Это происходит только тогда, когда вводится первый символ и в поле отображается подсказка. "автозамена" вроде ничего не делает.

Кто-нибудь знает обходной путь к этой проблеме? Я посмотрел на класс SkinnableTextBase, но не нашел виноватого кода.

Эта проблема началась с Flex 4.6.


person anber    schedule 06.06.2012    source источник


Ответы (3)


Проведя часы в коде Flex, я наконец понял, что проблема не в Flex. Проблема возникает с Air 3.2 (также в бета-версии Air 3.3). Если я компилирую с помощью Air 3.1, все работает нормально.

Я пробовал разные вещи и, похоже, не могу исправить это в Air 3.2 +. Я проверил другие свои проекты, и похоже, что все мои приложения, скомпилированные с помощью Air 3.2, имеют аналогичную проблему :(

[ОБНОВЛЕНИЕ]

Проблема находится где-то в SkinnableTextBase.as в Flex SDK.

Когда вызывается textDisplay_changeHandler (event: Event), проблема вызывает invalidateSkinState (). Если вы установите для скина значение «Ничего» (""), он будет работать:

skin.currentState = "";
invalidateSkinState();

Проблема в том, что тема не обновляется должным образом (а это ч @ ск).

Если в CSS вы установите для "showPromptWhenFocused" значение false, проблемы не возникнет; единственный побочный эффект - это сообщение исчезает, когда вы выбираете textInput.

s|TextInput
{
    skinClass:ClassReference("spark.skins.mobile.TextInputSkin");
    showPromptWhenFocused: false;
}

Надеюсь, это кому-то поможет.

person anber    schedule 07.06.2012
comment
Жаль, что проблема все еще присутствует в AIR 3.5. Именно эти мелочи делают Flex все менее жизнеспособным для разработки серьезных корпоративных приложений. Возможно, Adobe отказалась от него, потому что они увидели, что этот фреймворк вообще не подходит для мобильных устройств. Просто в нем слишком много недостатков. - person AlBirdie; 05.12.2012
comment
Ты спас мне день, +1 для этого, спасибо. Я бы не согласился с тем, что Flex становится все менее и менее жизнеспособным для предприятий, я бы сказал наоборот. В последнее время обновления AIR SDK действительно претерпевают значительные изменения. Вы должны знать, что Adobe покрывает 2 самые большие настольные и мобильные операционные системы, используя только 1 SDK, никто не может сделать лучше, и никакая комбинация html5 / любой другой не может превзойти это. iPhone5 и iPad Mini были поддержаны сразу после выхода на рынок. Однако я согласен с тем, что кое-где вы обнаружите эти маленькие неприятные ошибки, но это всегда возможно с любым фреймворком, а не только с AIR SDK. - person cybercow; 09.01.2013
comment
Я еще не вижу об этом упоминания; но, скорее всего, проблема связана с StageText и Flash TextField. Использование старого TextInputSkin переключает обратно на TextField - person JeffryHouser; 12.03.2013

Проблема с полетом решена для Textinput с искровыми скинами с FB4.6 и Air3.5. Думаю, актуальная проблема от Air. Но теперь программная клавиатура не активируется при фокусировке.

<s:TextInput id="mail"  softKeyboardType="email" skinClass="spark.skins.spark.TextInputSkin" />
person nijas    schedule 20.12.2012

Вы прокручиваете TextInput? В противном случае вы можете использовать новый мобильный скин Flex 4.6 TextInput. В новом скине используется StageText, который может исправить ваши проблемы. Удалите атрибут skinClass = "spark.skins.mobile.TextInputSkin", и он должен по умолчанию использовать новый скин.

<s:TextInput id="password" width="100%" displayAsPassword="true"
                 needsSoftKeyboard="true" 
                 prompt="Password"  
                 softKeyboardType="default"
                 returnKeyLabel="done"
                 autoCorrect="false"
                 />

Примечание. StageText не отображается должным образом, если вы прокручиваете TextInput и вам необходимо использовать мобильную оболочку Flex 4.5, как и в настоящее время.

person Brody Robertson    schedule 18.06.2012
comment
Я не прокручиваю текст. Вы правы в том, что НЕ используете скин spark.skins.mobile.TextInputSkin. Проблема в том, что если вы не используете мобильный скин, StageText будет отображаться поверх всего остального. Включая диалоги. Это просто не круто :( - person anber; 20.06.2012
comment
Я также должен упомянуть, что использование мобильного скина и компиляция с помощью Air 3.1 работают должным образом. Проблема существует только с Air 3.2+. Я думал, что проблема может быть в IOS, но, похоже, в основе проблемы лежит версия Air. Мне действительно нужно использовать Air 3.2 из-за функциональности stage3D. - person anber; 20.06.2012