0

我试图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

4

1 回答 1

1

该类BaseButton可能已mouseChildren设置为false,这会阻止任何嵌套的 DisplayObjects 接收鼠标事件。如果您mouseChildren = true;在派生类上进行设置,一切都应该按预期工作。

于 2012-07-06T07:37:37.193 回答