Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flash 如何使用fl.managers.FocusManager在AS3中创建多个选项卡循环?_Flash_Actionscript 3_Actionscript_Focusmanager - Fatal编程技术网

Flash 如何使用fl.managers.FocusManager在AS3中创建多个选项卡循环?

Flash 如何使用fl.managers.FocusManager在AS3中创建多个选项卡循环?,flash,actionscript-3,actionscript,focusmanager,Flash,Actionscript 3,Actionscript,Focusmanager,我想在AS3 Air项目中创建一个启用选项卡的弹出窗口。 当前,当我多次按tab键时,焦点会穿过弹出窗口中的所有组件,然后开始聚焦弹出窗口后面组件的按钮和文本字段。 我试图用两种方法来解决这个问题,但没有一种有效。我将在这里解释这两种方法 官方方法 我已经阅读了adobe的文档,其中描述了我在这种情况下应该做什么: 每个模式窗口组件都包含FocusManager的一个实例,因此该窗口上的控件成为它们自己的选项卡集。这可以防止用户通过按tab键无意中导航到其他窗口中的组件 但是我仍然不明白如何使用

我想在AS3 Air项目中创建一个启用选项卡的弹出窗口。 当前,当我多次按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,具体取决于在舞台上找到的子对象
    我瞥了一眼mx.managers.FocusManager代码,从我所看到的,他们的大部分精力都放在处理所有可能使用FocusManager的情况上,这就是为什么它如此漫长和复杂的原因。我只能假设fl.managers.FocusManagers看起来很相似。 我敢打赌,我的手机仍然有很多问题,而且它的便携性不如Adobe的手机,但它非常简单,而且它能满足我的需要


    我仍然希望看到一些关于如何正确使用现有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