2009-12-11 111 views
1

我有一个始终格式为“XX0000000XX”的文本字段,其中X是一个字母,0是一个数字。我根据用户是否需要输入数字或字母来切换键盘。如何确定UITextField的光标位置?

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

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

+0

下面的两个答案都不适合这种情况(虽然他们都有一些优点 - 谢谢!)。我向苹果发送了一个bug,重新检测光标位置,客户很高兴按照现在的方式运行它。唷。请让我知道,如果你有一个解决方案,允许检测到光标位置。 – 2009-12-12 03:38:48

+0

请让我们知道苹果何时会回应该错误。 ;) – SNR 2011-03-14 05:30:38

回答

0

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

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

不知道这是最好的方法,但在这里就是我如何做到这一点:

为UITextField捕获输入和一个UILabel显示输入。文本字段是隐藏的,但会被发送到第一个应答器以触发键盘。当用户键入时,委托方法会根据需要(如使用货币)来格式化文本,并更新UILabel,从而为用户提供有关其输入的反馈。

根据情况,您可能希望以这样一种方式设置UILabel的样式,使得用户无法像使用可选文本字段那样使用它,同时让他们确信它实际上是它们的输入。

随着比赛11个字符,我可以看到光标编辑如何可能是有用的。不过,电话号码通常在相同的范围内,我从来没有在电话应用程序中的顺序编辑器的问题。

0

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