我在 UITableView 中有几个 UITextFields。用户应该只能插入数字和点。为此,我将键盘类型设置为 UIKeyboardTypeNumberPad 并在左下角添加了一个“.”按钮。每次按下按钮时,都会调用一个函数。这个函数应该在当前光标位置插入一个点,但这是问题所在:UITextField 没有 selectedRange 属性,所以我无法获取当前光标位置。有谁知道如何解决这个问题或者有没有其他方法可以做到这一点?谢谢。
6 回答
我终于找到了解决这个问题的方法!您可以将需要插入的文本放入系统粘贴板中,然后将其粘贴到当前光标位置:
[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];
- (void)insertText:(NSString *)text
在 iOS 3.2 及更高版本中可用。
现在有一个很棒的数字键盘类型的键盘,它包括一个小数点,除了设置(不在 IB 中,还没有选项)UITextField
的keyboardType
属性为之外,不需要任何配置UIKeyboardStyleDecimalPad
,如下所示:
textField.keyboardType = UIKeyboardTypeDecimalPad;
这会自动完成你一直试图做的所有花哨的事情。
如果您要创建允许输入小数位的文本字段,我建议您将小数点固定到一定精度并允许用户输入数字,如下所示:
假设您的精度为小数点后 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
请参阅输入带小数点的数值的最佳方法是什么?对于货币的类似解决方案。
与创建自定义键盘并处理该方法所呈现的所有细微差别相比,这是一个更简单的解决方案。但是,如果您需要可变长度精度,那么该方法可能更适合您。
按下按钮时,将文本字段的值作为字符串读取。编辑字符串,然后将字段的值设置为新字符串。