0

每次单击弹出窗口(包含文本区域框)的链接时,我都会尝试自动关注文本区域框。我尝试使用 creationComplete 这样做,但只能工作一次。它也不适用于初始化。

<s:SkinnablePopUpContainer xmlns:fx="http://ns.adobe.com/mxml/2009" backgroundAlpha="0" contentBackgroundAlpha="0"
                       width="100%" height="100%"
                       xmlns:s="library://ns.adobe.com/flex/spark" xmlns:scripts="scripts.*"
                       creationComplete="notesTextArea.setFocus();">
4

2 回答 2

0

我解决这个问题的唯一方法是在显示弹出窗口后设置焦点。例子:

var aboutWindow:About = new About();
PopUpManager.addPopUp(aboutWindow,this);
PopUpManager.centerPopUp(aboutWindow);
aboutWindow.myTextArea.setFocus();

这对我来说可以。

于 2013-06-05T15:26:35.503 回答
0

虽然@gustyaquino 的回答是一个很好的建议,但我相信有一个更清洁的解决方案,更适合您正在使用的SkinnablePopUpContainer类。

SkinnablePopUpContainer有一个通常用于显示弹出窗口的open()方法。根据文档,该open()方法打开弹出窗口(使用PopUpManager,就像在@gustyaquino 的代码中一样),但它也起到了过渡效果,最后它调度了一个FlexEvent.OPEN事件。

此外,SkinnablePopUpContainer创建一次并重复使用。这就是为什么您的“creationComplete”和“initialize”事件解决方案仅在第一次(实际创建对象时)起作用。请注意,@gustyaquino 的解决方案每次都会弹出一个新窗口。这就是我们在SkinnablePopUpContainer课程存在之前滚动的方式。

在下面的示例中,我使用“open”事件来检测弹出窗口何时打开并将焦点设置在那里。我相信这是一种更简洁的方法(重新使用弹出窗口并将代码集中TextInput在弹出类内部)。

应用程序 MXML:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
               xmlns:s="library://ns.adobe.com/flex/spark"
               xmlns:mx="library://ns.adobe.com/flex/mx"
               xmlns:local="*"
               width="100%" height="100%">

    <fx:Declarations>
        <local:MyPopUp id="poppy" />
    </fx:Declarations>

    <s:Button label="Open pop up" click="poppy.open(this)" />

</s:Application>

弹出式 MXML:

<?xml version="1.0" encoding="utf-8"?>
<s:SkinnablePopUpContainer xmlns:fx="http://ns.adobe.com/mxml/2009" 
                           xmlns:s="library://ns.adobe.com/flex/spark" 
                           xmlns:mx="library://ns.adobe.com/flex/mx"
                           width="300" height="300"
                           backgroundColor="#c0c0c0"
                           open="onPopUpOpened()">

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

            override public function updatePopUpPosition():void
            {
                PopUpManager.centerPopUp(this);
                // this doesn't work here
                //myInput.setFocus();
            }

            private function onPopUpOpened():void
            {
                myInput.setFocus();
            }

        ]]>
    </fx:Script>

    <s:layout>
        <s:VerticalLayout paddingLeft="10" paddingRight="10" paddingTop="10"/>
    </s:layout>

    <s:TextInput id="myInput" width="100%"  />
    <s:Button label="Close" click="close()"/>
</s:SkinnablePopUpContainer>
于 2013-06-05T16:43:23.923 回答