TextInput永远不会成为焦点

时间:2012-07-06 05:58:23

标签: actionscript-3 flex textbox flex3

我想在按钮内设置一个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

1 个答案:

答案 0 :(得分:1)

BaseButton类可能将mouseChildren设置为false,这可以防止任何嵌套的DisplayObject接收鼠标事件。如果您在派生类上设置mouseChildren = true;,那么一切都应该按预期工作。