如何在没有 stagereference 的情况下设置 input-TextField 的焦点?

Posted

技术标签:

【中文标题】如何在没有 stagereference 的情况下设置 input-TextField 的焦点?【英文标题】:How set the focus of a input-TextField without having a stagereference? 【发布时间】:2011-08-21 12:39:13 【问题描述】:

我有一个文本输入字段:

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

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

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

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

【问题讨论】:

textfield所在的类,是DisplayObject的子类吗? 【参考方案1】:

您可以在主类中添加对舞台的静态引用并通过它设置焦点(或创建一个专用类以在任何地方获取舞台引用)。

主类代码:

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

    public function MainClass()
        STAGE = stage;
    

文本域类代码:

MainClass.STAGE.focus = myTextfield;

【讨论】:

我使用了来自 casalib 的 stagereference,但即使我有这个 stage reference 我也无法编写 textfield.myStageReference.focus = textfield... 你能提供一个小例子吗? 您应该始终重新考虑让整个应用程序可以全局访问舞台。 在这种情况下,我的文本框周围有一个黄色边框......我仍然不能直接写类型(我正在使用 adobe air/flashbuilder) 它解决了我的问题:我首先关注的是 TextField 所在的容器……【参考方案2】:

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

【讨论】:

【参考方案3】:

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

【讨论】:

【参考方案4】:

终于找到解决办法了

试试这段代码,它会起作用的

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

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

【讨论】:

以上是关于如何在没有 stagereference 的情况下设置 input-TextField 的焦点?的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有循环的情况下将文件逐行读入变量

如何在没有物理的情况下检测碰撞

如何在没有事件的情况下获取鼠标位置(不移动鼠标)?

如何在没有 createSlice 的情况下使用 createThunkAsync

如何在没有循环的情况下进行模拟?

如何在没有 GPU 的情况下运行 tensorflow?