在UITextField的光标位置插入字符串

时间:2009-08-23 06:49:02

标签: ios cocoa-touch uitextfield

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

6 个答案:

答案 0 :(得分: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];

答案 1 :(得分:10)

- (void)insertText:(NSString *)text

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

答案 2 :(得分:3)

在Swift中

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

textField.insertText("Hello")

关于使用光标位置的完整答案是here

答案 3 :(得分:2)

现在有一个梦幻般的数字键盘型键盘,包括一个小数点,除了设置(不在IB中,还没有选项)UITextField的{​​{1}}属性{ {1}},如下:

keyboardType

这是你自动尝试做的所有花哨的东西。

答案 4 :(得分: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

有关货币的类似解决方案,请参阅What is the best way to enter numeric values with decimal points?

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

答案 5 :(得分:0)

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