2.14.处理focusIn和focusOut事件

2.14.1. 问题
我想要在用户聚焦在一个标签上时,显示一个弹出窗口,并且当用户离开聚焦的时候关闭这个弹出窗口。
2.14.2. 解决办法
使用focusIn 和focusOut 事件(在InteractiveObject 类的子类的所有实例都可用)来调用PopUpManager 相关的方法。
2.14.3. 讨论
在用户聚焦时启动一个窗口,你可以重用前两节的代码。不过就是把弹出窗口的启动从用户点击LInkButton 切换到通过focusIn 事件来创建而已。组件接受到聚焦的时候就会发布focusIn 事件,例如当用户按tab 切换到组件上或者点击了它。focusIn 事件的处理代码只需要在之前章节的内容添加一点:
+展开
-ActionScript
systemManager.removeFocusManager(IFocusManagerContainer(popup))

对应的上下文:
+展开
-XML
<mx:Application
xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute">

<mx:Canvas horizontalCenter="0verticalCenter="0">
<mx:LinkButton id="lbllabel="Topx="100y="10"
focusIn="showDetail(event)focusOut="closePopUp()"/>

<mx:LinkButton label="Leftx="10y="100"
focusIn="showDetail(event)focusOut="closePopUp()"/>

<mx:LinkButton label="Bottomx="100y="200"
focusIn="showDetail(event)focusOut="closePopUp()"/>

<mx:LinkButton label="Rightx="200y="100"
focusIn="showDetail(event)focusOut="closePopUp()"/>

<mx:Canvas width="100height="100x="125y="40"
backgroundColor="#ff0000rotation="45">

</mx:Canvas>
</mx:Canvas>
<mx:Script>
<![CDATA[
import mx.managers.IFocusManagerContainer;
import mx.managers.PopUpManager;
private const POPUP_OFFSET:int = 10;
private var popup:CustomPopUp;
private function showDetail(evt:FocusEvent):void {
// create the popup
popup =
CustomPopUp(PopUpManager.createPopUp(this,CustomPopUp,false));
popup.message = "This is the detail for " +
evt.target.label;
// position the popup
var pt:Point = new Point(0, 0);
pt = evt.target.localToGlobal(pt);
popup.x = pt.x + POPUP_OFFSET;
popup.y = pt.y + evt.target.height + POPUP_OFFSET;
systemManager.removeFocusManager(IFocusManagerContainer(popup))
}
private function closePopUp():void {
PopUpManager.removePopUp(popup);
}

]]>
</mx:Script>
</mx:Application>

当任意的弹出窗口被创建,默认情况,SystemManager 会被弹出窗口联结的FocusManager激活。它允许基于刚创建的弹出窗口实现的聚焦循环(控制tab 顺序)。在这节,我们期望一个不同的行为。当用户聚焦离开的时候(例如用户tab 出组件),弹出窗口因该关闭。

这就是从SystemManager 上移除了弹出窗口的FocusManager 所获得的。因此重新启动应用程序的FocusManager。FocusOout 事件的处理函数closePopUp 包含了关闭弹出窗口的逻辑。

当这个应用程序运行中,重复按下tab 键的时候,聚焦会循环的在LinkButton 上产生,并且相关的弹出窗口会被创建或者移除。

加支付宝好友偷能量挖...


评论(0)网络
阅读(83)喜欢(0)flash/flex/fcs/AIR