【问题标题】:How to determine the cursor position of a UITextField?如何确定 UITextField 的光标位置?
【发布时间】:2009-12-11 01:30:54
【问题描述】:

我有一个总是格式为“XX0000000XX”的文本字段,X 是一个字母,0 是一个数字。我会在用户键入时根据他们是否需要输入数字或字母来切换键盘。

这工作正常,直到用户将光标放在文本字段的中间进行编辑。如何确定 UITextField 中的光标位置?

我知道 UITextView 有一个可以使用的 selectedRange,但我读过你不能强制 UITextView 成为单行条目?即禁用多行文本。

【问题讨论】:

  • 以下两个答案都不适合这种情况(尽管它们都有一些优点 - 谢谢!)。我已经向 Apple 发送了一个错误,重新检测光标位置,客户很乐意按照现在的方式运行它。唷。如果您有允许检测光标位置的解决方案,请告诉我。
  • 请让我们知道 Apple 何时会响应该错误。 ;)

标签: iphone objective-c uitextfield


【解决方案1】:

巧妙地使用键盘。我的直接想法是,也许你不应该让用户首先移动光标。

这在 iPhone UI 中并非没有先例。例如,电话键盘视图将用户限制为顺序输入。我还发现这种技术对货币输入很有用。基本上,任何具有非常严格语法的输入似乎都适合这种处理。可能适合您的情况。

不确定这是否是最好的方法,但我是这样做的:

一个用于捕获输入的 UITextField 和一个用于显示输入的 UILabel。文本字段被隐藏,但被发送 becomeFirstResponder 以触发键盘。当用户输入时,委托方法会根据需要(如货币)来格式化文本,并更新 UILabel,它为用户的输入提供反馈。

根据具体情况,您可能希望对 UILabel 进行样式设置,以明确用户不能像使用可选文本字段那样使用它,同时向他们保证这实际上是他们的输入。

游戏中有 11 个角色,我可以看到光标编辑可能会有多大用处。不过,电话号码通常在同一范围内,我在电话应用中的顺序编辑器从来没有遇到过问题。

【讨论】:

    【解决方案2】:

    有一个 UITextDelegate 方法 -textField:shouldChangeCharactersInRange:replacementString: 应该是你所需要做的所有你描述的事情。实施它以强制执行您想要的任何格式规则。您不应该关心光标在哪里,只关心建议的更改范围。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-02
      • 1970-01-01
      • 2012-04-16
      • 1970-01-01
      • 1970-01-01
      • 2011-07-02
      • 2010-11-22
      相关资源
      最近更新 更多