2011-05-09 69 views
2

我有一个文本InputField:如何设置输入文本字段的焦点,而无需一个stagereference?

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

因为这个文本框不驻留在主类,我没有做一台参考:

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

哪有我强制文本框在位置零时显示闪烁的线?

+0

该文本框驻留在类,是它是DisplayObject的子类吗? – Taurayi 2011-05-09 12:01:41

回答

2

您可以通过添加在你的主类的静态引用到舞台,并将焦点(或创建一个dedicaced类来获得系统的基准无论你在哪里)。

主要类代码:

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

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

TextField类代码:

MainClass.STAGE.focus = myTextfield; 
+0

我使用casalib一个stagereference,但即使我有这个阶段,参考我写不了textfield.myStageReference.focus =文本框...你能提供一个小的例子吗? – algro 2011-05-09 09:27:52

+0

我添加的代码示例 – 2011-05-09 09:36:52

+0

你应该总是考虑能否舞台全局应用于整个应用程序访问。 – Taurayi 2011-05-09 12:00:06

1

这有点Flash播放器的bug,因为如果将焦点设置与stage.focus =文本框,文本框实际上有焦点(你可以写一些东西),但没有闪烁的光标。另一方面,有一个闪烁的光标,但只有当你在播放器本地启动swf(不在浏览器中)。 要告知他们可以写东西的人,现在,你可以做一个光标自己 - 只需创建一个线,以动画播放,当有人写了一首字母隐藏。

+0

我刚刚在我的文本框中找到一行,没有直接输入可能... – algro 2011-05-09 14:01:17

0

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

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

你的名字文本字段,那么你可以很容易地使用它

相关问题