如何在没有阶段引用的情况下设置输入TextField的焦点?

时间:2011-05-09 08:38:46

标签: actionscript-3 input focus textinput setfocus

我有一个文本 - InputField:

var textfield:TextField = new TextField();
textfield.text = "";
textfield.type = TextFieldType.INPUT;
addChild(textfield);

因为这个文本字段不在主类中,所以没有阶段引用:

textfield.stage.focus = textfield;
or 
stage.focus = textfield

如何强制文本字段在零位置显示闪烁的线?

4 个答案:

答案 0 :(得分:2)

您可以在主类中为舞台添加静态引用,并通过它设置焦点(或创建专用类以随时随地获取舞台参考)。

主类代码:

public class MainClass extends Sprite{
    public static var STAGE : Stage;

    public function MainClass(){
        STAGE = stage;
    }
}

Textfield类代码:

MainClass.STAGE.focus = myTextfield;

答案 1 :(得分:1)

这是一个flash播放器的错误,因为如果你使用stage.focus = textfield设置焦点,textfield实际上有焦点(你可以写一些东西),但没有闪烁的光标。另一方面,有一个闪烁的光标,但只有当您在播放器(而不是在浏览器中)本地启动swf时。 为了告知人们他们现在可以写一些东西,你可以自己制作一个光标 - 只需创建一条线,为它设置动画并在有人写第一个字母时隐藏它。

答案 2 :(得分:0)

光标焦点有时会起作用,这更令人沮丧。我有两个几乎相同的应用程序的情况。无法运行的动画正在运行。这可能是一场冲突。

答案 3 :(得分:0)

最后我得到了解决方案

尝试使用此代码

public function SetFocus(mc:TextField):void{            
    addEventListener(Event.ENTER_FRAME,focus);
    function focus(E:Event){
        stage.focus=mc;
        if(mc.name.toString()==stage.focus.name.toString()){
            removeEventListener(Event.ENTER_FRAME,focus);   
        }
    }
}

您必须为文本字段命名,然后才能轻松使用