Flash 如何使用fl.managers.FocusManager在AS3中创建多个选项卡循环?
我想在AS3 Air项目中创建一个启用选项卡的弹出窗口。 当前,当我多次按tab键时,焦点会穿过弹出窗口中的所有组件,然后开始聚焦弹出窗口后面组件的按钮和文本字段。 我试图用两种方法来解决这个问题,但没有一种有效。我将在这里解释这两种方法Flash 如何使用fl.managers.FocusManager在AS3中创建多个选项卡循环?,flash,actionscript-3,actionscript,focusmanager,Flash,Actionscript 3,Actionscript,Focusmanager,我想在AS3 Air项目中创建一个启用选项卡的弹出窗口。 当前,当我多次按tab键时,焦点会穿过弹出窗口中的所有组件,然后开始聚焦弹出窗口后面组件的按钮和文本字段。 我试图用两种方法来解决这个问题,但没有一种有效。我将在这里解释这两种方法 官方方法 我已经阅读了adobe的文档,其中描述了我在这种情况下应该做什么: 每个模式窗口组件都包含FocusManager的一个实例,因此该窗口上的控件成为它们自己的选项卡集。这可以防止用户通过按tab键无意中导航到其他窗口中的组件 但是我仍然不明白如何使用
我已经阅读了adobe的文档,其中描述了我在这种情况下应该做什么: 每个模式窗口组件都包含FocusManager的一个实例,因此该窗口上的控件成为它们自己的选项卡集。这可以防止用户通过按tab键无意中导航到其他窗口中的组件 但是我仍然不明白如何使用FocusManager
- 我尝试在每个视图组件类中创建FocusManager实例,方法是将下面的代码放入构造函数中,但没有成功:
\u focusManager=新的focusManager(此)代码>
- “模态窗口组件”是什么意思
我尝试过的另一件事是,当父组件分派FOCUS\u IN或FOCUS\u OUT事件时,手动将每个按钮和文本字段上的tabEnabled属性设置为true或false。我在一个新的flash文件中创建了一个简单的示例,但它在我的大型项目中不起作用,我不知道如何调试它。不过,我很乐意抛开这个话题,回到方法1
[编辑]我得到了很多关于这个问题的意见,但没有相关的答案,所以我编辑了它并试图简化它根据您试图实现的目标,您可能可以使用tabIndex而不是FocusManager
我最终编写了自己的FocusManager,它满足了我的需要。结果比我最初想象的要容易。 很抱歉,我不能在这里发布代码,但我将向您简要介绍我所做的工作,并希望它能有所帮助:
- 我实现了fl.managers.IFocusManager界面,但我并不完全尊重老经理的工作方式
- CustomFocusManager的构造函数需要一个tabbable子元素数组作为参数,子元素必须按照它们在循环中出现的顺序排列。这样,我就不必关心孩子的类型(它是tabbable还是not?),也不必问自己tabindex是否存在李>
- 我忽略了tabIndex属性
- 我创建了一个名为IFocusManagerContainer的新接口,它的灵感来自同名的Flex接口
- 我创建了一个类似于Flex的SystemManager的静态类,它知道何时激活/停用FocusManager,具体取决于在舞台上找到的子对象
我仍然希望看到一些关于如何正确使用现有FocusManager的指南 是的,打标签真的很痛苦 我有一个类似的问题,当我打开一个弹出窗口后,选项卡停止工作。 问题是弹出窗口在后台是活动的,并劫持了标签 这就解决了我的问题,现在主应用程序和弹出窗口都有单独的tabcycles:
// my popupclass
protected var fm:FocusManager;
public function show( centered:Boolean = true, parent:DisplayObject = null, modal:Boolean = true ):void {
// some code
fm = new FocusManager( this );
fm.activate();
}
public function hide( closeType:int = 1 ):void {
// more code
fm.deactivate();
}
特雷弗,我已经在使用tabIndex属性了。的确,每当我将tabEnabled属性设置为false时,我还没有尝试将其设置为-1(在方法2中,使用了愚蠢的解决方法),但我发现这并不是创建多个tab循环的真正解决方案。这只是一个破解,应该是开箱即用的。你只是在为弹出窗口设置tabIndex吗?“如果SWF文件中当前显示的任何对象包含tabIndex属性,将禁用自动选项卡排序”,根据我的经验,这将阻止在以下组件中进行选项卡设置。当显示弹出窗口时,我将为弹出对象设置tabIndex,然后在“隐藏”上,将它们设置回-1。如果您的项目中需要另一个选项卡顺序,我会创建一个setTabOrder和resetTabOrder函数来启用和禁用它们。特雷弗,很抱歉回复太晚,但我一直在度假。我理解你的观点,这很有道理。这几乎和我在解决方案2(变通方法)中所做的一模一样。但我有两个反对的理由:1。由于某种奇怪的原因,它不起作用。我真的不喜欢重新实现选项卡机制,我只想知道如何正确使用FocusManager