我有一个自定义的 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/