我想在按钮内设置一个TextInput
,但似乎我的按钮会拦截TextInput
之前的所有鼠标事件。
基本上我有这样的课程BaseButton
:
public class BaseButton extends Sprite
{
[...]
public function addMouseListeners( target : InteractiveObject = null ) : void {
if ( !target ) target = this;
target.addEventListener(MouseEvent.ROLL_OVER, mouseOverHandler, false, 0, true);
target.addEventListener(MouseEvent.ROLL_OUT, mouseOutHandler, false, 0, true);
target.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler, false, 0, true);
target.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler, false, 0, true);
}
[...]
}
我要将TextInput
扩展为BaseButton
public class AddFilterDropDownListItem extends BaseButton {
private var _input:TextInput;
public function AddFilterDropDownListItem() {
super();
}
override protected function setupAssets():void {
_input = new TextInput();
_input.height = 40;
_input.width = 240;
this.addChild(_input);
_input.appendText("Add..");
}
}
我无法修改TextInput
,点击事件似乎被BaseButton
捕获。我不明白为什么,作为BaseButton
的孩子,我的TextInput
没有优先权?
我可以通过添加TextInput
将其添加到父级来解决我的问题:
override protected function setupAssets():void {
_input = new TextInput();
_input.height = 40;
_input.width = 240;
parent.addChild(_input); //<------ dirty solution
_input.appendText("Add..");
}
你能解释一下为什么会失败吗?我怎样才能干净利落地解决它?
PS:我无法改变项目的架构。我的班级必须延长BaseButton
,我无法更改BaseButton
。
答案 0 :(得分:1)
BaseButton
类可能将mouseChildren
设置为false
,这可以防止任何嵌套的DisplayObject接收鼠标事件。如果您在派生类上设置mouseChildren = true;
,那么一切都应该按预期工作。