每次点击弹出窗口(包含textarea框)的链接时,我都会尝试自动关注textarea框。我尝试使用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();">
答案 0 :(得分:0)
我解决这个问题的唯一方法是在显示弹出窗口后设置焦点。例如:
var aboutWindow:About = new About();
PopUpManager.addPopUp(aboutWindow,this);
PopUpManager.centerPopUp(aboutWindow);
aboutWindow.myTextArea.setFocus();
它适用于我。
答案 1 :(得分: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>
PopUp 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>