Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 如何在没有阶段引用的情况下设置输入文本字段的焦点?_Actionscript 3_Input_Focus_Textinput_Setfocus - Fatal编程技术网

Actionscript 3 如何在没有阶段引用的情况下设置输入文本字段的焦点?

Actionscript 3 如何在没有阶段引用的情况下设置输入文本字段的焦点?,actionscript-3,input,focus,textinput,setfocus,Actionscript 3,Input,Focus,Textinput,Setfocus,我得到一个文本输入字段: var textfield:TextField = new TextField(); textfield.text = ""; textfield.type = TextFieldType.INPUT; addChild(textfield); 由于此textfield不在主类中,因此我没有用于执行以下操作的阶段引用: textfield.stage.focus = textfield; or stage.focus = textfield 如何强制文本字段在位置

我得到一个文本输入字段:

var textfield:TextField = new TextField();
textfield.text = "";
textfield.type = TextFieldType.INPUT;
addChild(textfield);
由于此textfield不在主类中,因此我没有用于执行以下操作的阶段引用:

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

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

您可以在主类中添加对stage的静态引用,并通过它设置焦点(或者创建dedicated类以在任何位置获取stage引用)

主要类别代码:

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

    public function MainClass(){
        STAGE = stage;
    }
}
MainClass.STAGE.focus = myTextfield;
Textfield类代码:

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

    public function MainClass(){
        STAGE = stage;
    }
}
MainClass.STAGE.focus = myTextfield;

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

光标焦点有时确实有效,这更令人沮丧。我有两个几乎完全相同的应用程序。不工作的一个正在运行动画。这可能是一场冲突。

我终于找到了解决办法

试试这个代码,它会工作的

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);   
        }
    }
}

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

我使用来自casalib的StagerReference,但是即使我有这个阶段引用,我也不能写textfield.myStageReference.focus=textfield…你能提供一个小例子吗?你应该总是重新考虑让整个应用程序都可以全局访问这个阶段。在这种情况下,我的文本框周围有一个黄色边框…我仍然不能直接写类型(我正在使用AdobeAIR/flashbuilder)它解决了我的问题:我首先关注TextField所在的容器……TextField所在的类,它是
DisplayObject
的子类吗?