在UITextField的光标位置插入string

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

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

[myTextField paste:self] 

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

粘贴function是特定于OS V3.0的,但是我已经testing过了,它对于我自定义的键盘来说工作的很好。

更新:根据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]; 

- (void)insertText:(NSString *)text

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

现在有一个奇妙的数字键盘types的键盘,包括一个小数点,没有必要的configuration,除了设置(不在IB中,还没有一个选项) UITextFieldkeyboardType属性到UIKeyboardStyleDecimalPad ,如下所示:

 textField.keyboardType = UIKeyboardTypeDecimalPad; 

这样做的所有花式的东西,你一直试图自动执行。

如果你想创build文本字段,让你input小数位可能我build议你宁愿修复小数点到一定的精度,并允许用户input数字如下:

假设你的精度是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 

请参阅使用小数点input数值的最佳方法是什么? 为货币类似的解决scheme。

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

在Swift中

这将插入当前光标位置的文本。

 textField.insertText("Hello") 

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

按下button时,以stringforms读取文本字段的值。 编辑string,然后将该字段的值设置为新string。