Flash UI 组件的FocusManager与Flex的冲突

Flex和Flash组件一起使用时,一旦按下Tab键,会有这样的报错:

ArgumentError: Error #2025: 提供的 DisplayObject 必须是调用者的子级。
at flash.display::DisplayObjectContainer/getChildIndex()
at mx.core::Container/getChildIndex()
at mx.containers::Panel/getChildIndex()
at fl.managers::FocusManager/getChildIndex()
at fl.managers::FocusManager/sortByDepth()
at Array$/_sort()
at Array/http://adobe.com/AS3/2006/builtin::sort()
at fl.managers::FocusManager/sortFocusableObjects()
at fl.managers::FocusManager/keyDownHandler()
ArgumentError: Error #2025: 提供的 DisplayObject 必须是调用者的子级。
at flash.display::DisplayObjectContainer/getChildIndex()
at mx.core::Container/getChildIndex()
at mx.containers::Panel/getChildIndex()
at fl.managers::FocusManager/getChildIndex()
at fl.managers::FocusManager/sortByDepth()
at Array$/_sort()
at Array/http://adobe.com/AS3/2006/builtin::sort()
at fl.managers::FocusManager/sortFocusableObjects()
at fl.managers::FocusManager/getNextFocusManagerComponent()
at fl.managers::FocusManager/setFocusToNextObject()
at fl.managers::FocusManager/keyFocusChangeHandler()

这是因为Flash文件中使用了Flash提供的UI组件,这些组件里都包含了fl.managers.FocusManager这个类,它与 Flex中的FocusManager有冲突。最简单的办法是,不加载那个Flash文件了,或者把那个文件中的UI组件去掉,但这又影响功能。

所以最根本的办法是在根源处抑制。

在Flash中使用到UI组件的地方,把UI组件中的focusManager禁用,比如:

var scrollBar:UIScrollBar = new UIScrollBar();
addChild(scrollBar);
var fm = scrollBar.focusManager;
fm.deactivate();
 



scrollBar是一个fl.controls.UIScrollBar。

以上文章转自这里http://flexbaba.com/?p=430

 

PS:这东西真的非常恶心。

你可能感兴趣的:(manager)