如何在Flex中的TabBar组件上使用制表符?

时间:2020-03-05 18:52:17  来源:igfitidea点击:

我有一个按钮栏inf flex以及其他几个输入控件,我为每个控件设置了tabIndex属性,并且一切顺利,直到我将其切换到ButtonBar为止。

ButtonBar有3个按钮,但在其上进行制表,只有第一个按钮获得焦点,再次制表,焦点又回到顶部控件...

我如何通过Flex按钮栏中的所有按钮进行制表?有没有办法做到这一点,或者我需要为此创建单独的按钮吗?

对我来说,这似乎是一个可能的错误...

解决方案

回答

编写该组件是为了使用户在焦点位于栏中时必须按向左/向右箭头键才能遍历按钮-这是一种相当标准的GUI行为(我们也可以在其他位置(如单选按钮组中看到))。如果查看ButtonBar的SDK源,可以看到它们在创建每个子按钮时显式禁用了标签焦点的位置:

override protected function createNavItem(
                                        label:String,
                                        icon:Class = null):IFlexDisplayObject
    {
        var newButton:Button = Button(navItemFactory.newInstance());

        // Set tabEnabled to false so individual buttons don't get focus.
        newButton.focusEnabled = false;
    ...

如果我们确实想更改此行为,则可以创建一个子类来执行此操作,如下所示:

package {
    import mx.controls.Button;
    import mx.controls.ButtonBar;
    import mx.core.IFlexDisplayObject;

    public class FocusableButtonBar extends ButtonBar {
        public function FocusableButtonBar()
        {
            super();
            this.focusEnabled = false;
        }

        override protected function createNavItem(
                    label:String, icon:Class=null):IFlexDisplayObject
        {
            var btn:Button = Button(super.createNavItem(label, icon));
            btn.focusEnabled = true;
            return btn;
        }
    }
}