Настройка фокуса для элемента управления textInput в Popup - PullRequest
5 голосов
/ 27 июля 2010

Я пытаюсь получить всплывающее окно с немедленно редактируемым TextInput. Это означает, что пользователь должен иметь возможность печатать внутри TextInput после отображения всплывающего окна.

Проблема в том, что я не могу сосредоточиться на textInput. Что происходит, когда при первом нажатии клавиши текст не вставляется, только после нажатия второй клавиши компонент получает фокус и пользователь может печатать. Например, ввод «test» после открытия всплывающего окна приводит к отображению «est» ...

По какой-то причине компонент получает фокус только тогда, когда пользователь явно нажимает на него или что-то печатает. Программная настройка фокуса не работает.

Есть идеи / предложения?

Код:

<?xml version="1.0" encoding="utf-8"?>
<mx:Panel xmlns="mog.miss.component.*" xmlns:mx="http://www.adobe.com/2006/mxml" >

<mx:Script>
    <![CDATA[
        import mx.managers.IFocusManagerComponent;

        private function focus():void{
            focusManager.setFocus(commentTextInput as IFocusManagerComponent);
            commentTextInput.setSelection(commentTextInput.text.length,commentTextInput.text.length);
        }

    ]]>
</mx:Script>
<mx:TextInput id="commentTextInput" creationComplete="{focus()}" />

</mx:Panel>

Ответы [ 4 ]

2 голосов
/ 01 сентября 2010

Проблема была в том, что я запускал всплывающий вызов клавишей F10. F10 зарезервирован системой ... он вызвал обработчик и всплывающее окно было создано, но приложение почему-то потеряло фокус. Использование другого ключа исправило это. Единственный зарезервированный ключ - F10. Подробнее об этом

0 голосов
/ 21 сентября 2015

в моем случае я просто внедрил IFocusManagerContainer в свой пользовательский компонент, и все работало нормально

private var _defaultButton: IFlexDisplayObject = / компонент по умолчанию /;

    public function get defaultButton():IFlexDisplayObject{
        return _defaultButton;
    }
    public function set defaultButton(value:IFlexDisplayObject):void{
        _defaultButton = value;
        ContainerGlobals.focusedContainer = null;
    }
0 голосов
/ 31 августа 2010

Вот что у меня работает. В событии creationComplete всплывающего окна:

private function onCreationComplete():void
{
  callLater(this.commentTextInput.setFocus);
}
0 голосов
/ 27 июля 2010

Это зависит от того, как вы пытаетесь это сделать.Для меня работает обработка события creationComplete всплывающего окна:

private function onCreationComplete():void 
{
    focusManager.setFocus(this.mytextInput as IFocusManagerComponent);
}

PS: «Обработчик» в примере добавляется через mxml, поэтому у него нет параметров.

...