【问题标题】:Custom TextInput component loses focus but still contains cursor?自定义 TextInput 组件失去焦点但仍包含光标?
【发布时间】:2011-10-29 00:04:56
【问题描述】:

我有一个自定义的TextInput 来监听FocusEvent.FOCUS_INFocusEvent.FOCUS_OUT 事件:

textDisplay.addEventListener(FocusEvent.FOCUS_IN, onFocusInHandler);
textDisplay.addEventListener(FocusEvent.FOCUS_OUT, onFocusOutHandler);

我的onFocusInHandler 函数基本上删除了告诉用户输入值的“提示视图”,而onFocusOutHandler 则相反。

例如,如果 TextInput 文本被退格为空白值,并且用户单击 TextInput 框外,则会在 TextInput 中显示“请输入值”浅灰色提示。

在用户单击我们的自定义“清除”按钮之前,这一切正常。清除按钮将文本设置为“”,我可以告诉FocusEvent.FOCUS_OUT 已收到,因为提示文本设置为可见(未在其他任何地方设置)。问题是,光标仍然在框中,就好像它仍然有焦点一样,所以如果用户立即开始输入,提示文本“请输入一个值”用户输入的文本都会出现在上面灰色的文字,看起来很丑陋且难以阅读。

如果 TextInput 实际上没有失去焦点,为什么它会收到 FocusEvent.FOCUS_OUT 事件?有什么办法可以解决这个问题吗?

【问题讨论】:

  • 您要禁用该组件吗?我的经验是,如果 Spark TextInput 被禁用,它在失去焦点时无法正确地做出应有的视觉变化。
  • 您使用的是 Spark TextInput 还是 MX TextInput?默认情况下,spark TextInput 不这样做吗?只需使用提示属性。 help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/…

标签: apache-flex actionscript flex4.5


【解决方案1】:

选项 1. 在 Flex 4.1 或 4.5 中使用 Spak TextInput。这已经默认提供了一个 promptDisplay(如 cmets 中所述)

选项 2。看看焦点皮肤。这个皮肤类通常放在正常皮肤的顶部。这两者之间可能存在一些焦点模糊。尝试使用没有 textDisplay 和 clear 按钮的自定义焦点皮肤。

选项3。不仅使用焦点事件来显示或隐藏提示,还要查看TextInput的内容。您不希望在通过绑定设置文本时显示提示。

【讨论】:

  • 我切换到 Spark TextInput。我很犹豫,因为我们还有其他组件依赖于我们的自定义组件,但如果它可用,那么更改会更有意义。谢谢!
猜你喜欢
  • 1970-01-01
  • 2018-08-07
  • 1970-01-01
  • 2019-10-10
  • 1970-01-01
  • 2011-04-02
  • 2011-11-01
  • 1970-01-01
  • 2023-04-07
相关资源
最近更新 更多