我有一个自定义的 ItemRenderer ,它在3个面板中的每个面板中显示5个文本输入:

<?xml version="1.0" encoding="utf-8"?>
<mx:VBox
    xmlns:mx="http://www.adobe.com/2006/mxml"
    height="300"
    width="800"
    creationComplete="onCreationComplete()"
>
    <!-- code-behind -->
    <mx:Script source="ChainListRenderer.mxml.as" />

    <mx:Label text="{data.title}" fontSize="25" fontWeight="bold" width="100%" textAlign="center" />
    <mx:HBox>
        <mx:Panel id="triggerPanel" title="Trigger" width="260">
            <mx:VBox id="tpBoxes" width="100%" paddingBottom="5" paddingLeft="5" paddingRight="5" paddingTop="5">
                <mx:TextInput id="trigger1" width="100%" textAlign="left" tabIndex="0" tabEnabled="true" />
                <mx:TextInput id="trigger2" width="100%" textAlign="left" tabIndex="1" tabEnabled="true" />
                <mx:TextInput id="trigger3" width="100%" textAlign="left" tabIndex="2" tabEnabled="true" />
                <mx:TextInput id="trigger4" width="100%" textAlign="left" tabIndex="3" tabEnabled="true" />
                <mx:TextInput id="trigger5" width="100%" textAlign="left" tabIndex="4" tabEnabled="true" />
            </mx:VBox>
        </mx:Panel>
        <mx:Panel id="linkPanel" title="Link" width="260">
            <mx:VBox id="lpBoxes" width="100%" paddingBottom="5" paddingLeft="5" paddingRight="5" paddingTop="5">
                <mx:TextInput id="link1" width="100%" textAlign="left" tabIndex="5" tabEnabled="true" />
                <mx:TextInput id="link2" width="100%" textAlign="left" tabIndex="6" tabEnabled="true" />
                <mx:TextInput id="link3" width="100%" textAlign="left" tabIndex="7" tabEnabled="true" />
                <mx:TextInput id="link4" width="100%" textAlign="left" tabIndex="8" tabEnabled="true" />
                <mx:TextInput id="link5" width="100%" textAlign="left" tabIndex="9" tabEnabled="true" />
            </mx:VBox>
        </mx:Panel>
        <mx:Panel id="answerPanel" title="Answer" width="260">
            <mx:VBox id="apBoxes" width="100%" paddingBottom="5" paddingLeft="5" paddingRight="5" paddingTop="5">
                <mx:TextInput id="answer1" width="100%" textAlign="left" tabIndex="10" tabEnabled="true" />
                <mx:TextInput id="answer2" width="100%" textAlign="left" tabIndex="11" tabEnabled="true" />
                <mx:TextInput id="answer3" width="100%" textAlign="left" tabIndex="12" tabEnabled="true" />
                <mx:TextInput id="answer4" width="100%" textAlign="left" tabIndex="13" tabEnabled="true" />
                <mx:TextInput id="answer5" width="100%" textAlign="left" tabIndex="14" tabEnabled="true" />
            </mx:VBox>
        </mx:Panel>
    </mx:HBox>
</mx:VBox>

不幸的是,当用作ItemRenderer时,即使上面的tabIndex值也不能在文本输入之间进行制表键。如果我将此代码复制到它自己的MXML应用程序中,则在文本输入之间进行制表将按预期工作。

有谁知道如何在这种情况下还原制表符?如果我必须在没有如此简单的可用性元素的情况下发布该应用程序,这将是一种耻辱。

我想我可能需要实现mx.managers.IFocusManagerComponent,但是我找不到有关如何执行此操作的任何示例,而且FocusManager docs也无济于事。

最佳答案

我将mx:VBox用作自定义itemRenderer,为我的数据网格使用了rendererIsEditor =“true”,并且我也遇到了制表符顺序问题。

我发现,itemRenderer需要实现IFocusManagerComponent,以便主应用程序的FocusManager()能够正确地切换至它。我尝试实现该接口(interface):

<?xml version="1.0"?>
<mx:VBox implements="mx.managers.IFocusManagerComponent" ...>
 [the rest of my itemRenderer code]
</mx:VBox>

...事实证明,要做起来很复杂...要实现很多接口(interface)函数。

但是,就我而言,我很幸运。我的itemRenderer中只有一个TextInput元素(其余的都是自定义代码,验证器和格式化程序),因此我将我的itemRenderer从mx:VBox转换为mx:TextInput(已经实现了IFocusManagerComponent):
<?xml version="1.0"?>
<mx:TextInput ...>
 [the rest of my itemRenderer code]
</mx:TextInput>

瞧!我的跳位顺序问题已修复。

我想对那些使用更复杂的itemRenderers的人的结论是,您将需要在类中完全实现IFocusManagerComponent接口(interface)...这可能很好,因为看起来它可以告诉flex如何通过itemRenderer自定义标签领域。或者,您可以将顶级标签更改为已经实现该接口(interface)的内容,例如:您可以将mx:VBox嵌套在以下内容中:
<mx:Container focusIn="FocusManager.setFocus(trigger1)">

...并且可能起作用了吗?代码比我更复杂的人应该尝试一下,看看会发生什么。

关于apache-flex - Flex ItemRenderer防止在文本输入之间使用制表符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/878999/

10-12 00:53