@gustyaquino からの回答は良い提案ですが、使用しているSkinnablePopUpContainerクラスにより適した、ややクリーンなソリューションがあると思います。
SkinnablePopUpContainer
ポップアップを表示するために通常使用される open() メソッドがあります。ドキュメントによると、このメソッドは ( @gustyaquino のコードのようにopen()
を使用して) ポップアップを開きますが、トランジション効果も再生し、最後にイベントをディスパッチします。PopUpManager
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>