12

我在 UITableView 中有几个 UITextFields。用户应该只能插入数字和点。为此,我将键盘类型设置为 UIKeyboardTypeNumberPad 并在左下角添加了一个“.”按钮。每次按下按钮时,都会调用一个函数。这个函数应该在当前光标位置插入一个点,但这是问题所在:UITextField 没有 selectedRange 属性,所以我无法获取当前光标位置。有谁知道如何解决这个问题或者有没有其他方法可以做到这一点?谢谢。

4

6 回答 6

33

我终于找到了解决这个问题的方法!您可以将需要插入的文本放入系统粘贴板中,然后将其粘贴到当前光标位置:

[myTextField paste:self]  

我在这个人的博客上找到了解决方案:
http://dev.ragfield.com/2009/09/insert-text-at-current-cursor-location.html

粘贴功能是特定于 OS V3.0 的,但我已经对其进行了测试,它使用自定义键盘对我来说效果很好。

更新:根据下面 Jasarien 的评论,最好先保存粘贴板内容,然后再恢复它们。为方便起见,这是我的代码:

  // Get a reference to the system pasteboard
  UIPasteboard* lPasteBoard = [UIPasteboard generalPasteboard];

  // Save the current pasteboard contents so we can restore them later
  NSArray* lPasteBoardItems = [lPasteBoard.items copy];

  // Update the system pasteboard with my string
  lPasteBoard.string = @"-";

  // Paste the pasteboard contents at current cursor location
  [myUIField paste:self];

  // Restore original pasteboard contents
  lPasteBoard.items = lPasteBoardItems;

  [lPasteBoardItems release];
于 2009-10-24T18:27:45.653 回答
12

- (void)insertText:(NSString *)text

在 iOS 3.2 及更高版本中可用。

于 2013-01-11T03:17:42.147 回答
4

在斯威夫特

这会在当前光标位置插入文本。

textField.insertText("Hello")

我关于使用光标位置的完整答案在这里

于 2016-01-21T11:27:17.560 回答
2

现在有一个很棒的数字键盘类型的键盘,它包括一个小数点,除了设置(不在 IB 中,还没有选项)UITextFieldkeyboardType属性为之外,不需要任何配置UIKeyboardStyleDecimalPad,如下所示:

textField.keyboardType = UIKeyboardTypeDecimalPad;

这会自动完成你一直试图做的所有花哨的事情。

于 2011-05-14T05:59:24.333 回答
1

如果您要创建允许输入小数位的文本字段,我建议您将小数点固定到一定精度并允许用户输入数字,如下所示:

假设您的精度为小数点后 2 位:

start: value is 0.00
user enters 1: value is 0.01
user enters 2: value is 0.12
user enters 3: value is 1.23
user enters 4: value is 12.34

请参阅输入带小数点的数值的最佳方法是什么?对于货币的类似解决方案。

与创建自定义键盘并处理该方法所呈现的所有细微差别相比,这是一个更简单的解决方案。但是,如果您需要可变长度精度,那么该方法可能更适合您。

于 2009-08-23T08:04:31.703 回答
0

按下按钮时,将文本字段的值作为字符串读取。编辑字符串,然后将字段的值设置为新字符串。

于 2009-08-23T07:11:36.427 回答