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

Ios 在UITextField的光标位置插入字符串,ios,cocoa-touch,uitextfield,Ios,Cocoa Touch,Uitextfield,我在UITableView中有几个UITextFields。用户应该只能插入数字和点。为此,我将键盘类型设置为UIKeyboardTypeNumberPad,并在左下角添加了一个“.”按钮。每次按下按钮,都会调用一个函数。此函数应在当前光标位置插入一个点,但问题在于:UITextField没有selectedRange属性,因此无法获取当前光标位置。有没有人知道如何解决这个问题,或者有没有其他方法?谢谢。按下按钮时,以字符串形式读取文本字段的值。编辑字符串,然后将字段值设置为新字符串。如果您希望

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

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

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

假设精度为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
有关货币的类似解决方案,请参阅


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

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

[myTextField paste:self]  
我在此人的博客上找到了解决方案:

粘贴功能是OSV3.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];

现在有了一种奇妙的数字键盘,它包括一个小数点,除了设置
UITextField
keyboardType
属性到
UIKeyboardStyleDecimalPad
之外,无需任何配置,如下所示:

textField.keyboardType = UIKeyboardTypeDecimalPad;
这会自动完成您一直试图完成的所有高级任务。


在iOS 3.2及更高版本中提供。

在Swift中提供

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

textField.insertText("Hello")

关于使用光标位置,我的完整答案是。

是的,但关键是他不知道如何修改字符串。他想在光标所在的位置插入一个点,但他不知道光标所在的位置。他不会在当前光标位置插入一个点,只是在字符串的末尾。谢谢。我认为这是最好的方法。这就是问题的真正含义。这是一个很好的解决方案。不过,这里值得一提的是,您需要在将内容放入粘贴板之前保存用户的粘贴板内容,然后再恢复用户的内容。通过这种方式,他们不知道您使用了粘贴板,并且您的代码是一个好公民,因为它不会破坏用户粘贴板的内容。此解决方案与画外音不兼容。不是说插入的字符,而是简单地说“粘贴”。这似乎是目前这个问题的正确答案。请在你的答案中再添加一件事。。用于删除光标位置处的字符。。可以使用
deleteBackward()
此方法。