【问题标题】:When set UITextField as FirstResponder programmatically, cause some weird actions on text editing当以编程方式将 UITextField 设置为 FirstResponder 时,会导致一些奇怪的文本编辑动作
【发布时间】:2014-02-20 06:23:39
【问题描述】:

我有一个带有自定义键盘的 UITextField,基本上就像一个计算器。我希望我的键盘默认显示,所以我在viewDidLoad 中使用了[self.topInputTextField becomeFirstResponder];,我认为这是非常常见的用法。但是,它会在我的文本字段上引起一些非常奇怪的操作。

当我在 viewDidLoad 中将我的文本字段设置为第一响应者时,每次我完成编辑后,文本都会跳转,当我单击另一个文本字段并再次单击第一个文本字段时,第一个文本中的文本字段有时会向下移动并消失,但有时不会。我觉得很难描述,所以我为它录制了一张 GIF 图片。

我确信[self.topInputTextField becomeFirstResponder]; 导致问题的原因是,当我注释掉那行代码时,一切恢复正常。这是我注释掉该行后的 GIF:

这对我来说很奇怪,在 2 个 GIF 文件之间,我所做的唯一更改是注释掉那行代码。我在 SE 上找不到任何解决方案。任何想法将不胜感激。

编辑: 另一件事是我尝试更改字体和字体大小,它们都有类似的奇怪行为。

*编辑2:** 这是我设置文本字段的方式,我没有做任何花哨的事情

【问题讨论】:

  • 您能否提供有关文本字段大小的更多信息?以及它们是如何在视图控制器或 nib 文件中设置的?
  • 如果您提供相同的部分代码会更好。
  • 确定我会添加更多屏幕截图

标签: ios uitextfield becomefirstresponder


【解决方案1】:

尝试在viewDidAppear 中调用键盘,此方法在viewDidLoad 之后调用。我认为这是因为您应该只在已向用户显示的加载视图上调用键盘,因此如果您在视图实际出现之前调用它会导致意外行为。

【讨论】:

  • 视图在可见之前可能无法成为响应者,因为它还不是响应者链的一部分
  • 为这个答案保佑你的灵魂,神秘的鸡人。
【解决方案2】:

viewDidLoad 调用它还为时过早,UI 尚未确定您的屏幕尺寸,甚至您的设备所处的方向。它还不是真正的 UI...在 willAppearAnimated: 中尝试。 .

【讨论】:

  • viewWillAppearviewDidAppear 都试过了吗?
  • @Chicken 实际上只是尝试了 viewDidAppear,它解决了这个问题.. viewWillAppear 不会.. 你可以添加它作为答案,你介意解释一下吗?
  • Jef 的推理是正确的,UI 的实际绘制并没有在 viewDidLoad 中完成。谢谢:)
  • 好吧,这就是你在堆栈上赢得的最便宜的 15 分 ya pirate :p bravo
  • @chicken 没什么不好的,开玩笑的都是伙伴
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多