如何在没有 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 的焦点?的主要内容,如果未能解决你的问题,请参考以下文章