【问题标题】:How set the focus of a input-TextField without having a stagereference?如何在没有 stagereference 的情况下设置 input-TextField 的焦点?
【发布时间】: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的子类吗?

标签: actionscript-3 input focus textinput setfocus


【解决方案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);   
              }
          }
      }
      

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

      【讨论】:

        猜你喜欢
        • 2021-06-09
        • 2012-05-14
        • 1970-01-01
        • 2022-11-22
        • 2012-04-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-23
        相关资源
        最近更新 更多