我已经在iOS应用程序中实现了自定义键盘视图。我有几个使用此键盘的UITextFields。其中一些UITextFields的代理可以覆盖shouldChangeCharactersInRange
。但是,如果我的键盘只是在文本字段中设置文本值,则不会发送shouldChangeCharactersInRange消息。我想我需要的是实际执行SendKey之类的操作,并将密钥代码发送到UITextField。iOS:如何将密钥发送给UITextField?
有什么建议吗?
我已经在iOS应用程序中实现了自定义键盘视图。我有几个使用此键盘的UITextFields。其中一些UITextFields的代理可以覆盖shouldChangeCharactersInRange
。但是,如果我的键盘只是在文本字段中设置文本值,则不会发送shouldChangeCharactersInRange消息。我想我需要的是实际执行SendKey之类的操作,并将密钥代码发送到UITextField。iOS:如何将密钥发送给UITextField?
有什么建议吗?
听起来好像键盘负责将shouldChangeCharactersInRange消息发送给UITextField本身,而不仅仅是设置它的值。让你的键盘计算的range
和string
的值,并调用:
if ([[theTextField delegate] textField:theTextField shouldChangeCharactersInRange:range replacementString:string])
theTextField.text = [theTextField.text stringByReplacingCharactersInRange:range withString:string];
As I note in my answer here的UITextField
符合UITextInput
协议。所以,你调用它的方法:
[textField replaceRange:textField.selectedTextRange withText:text];
有趣的是:""
将执行退格,当然," "
会做的空间。
这应该自动调用shouldChangeCharactersInRange
方法。如果不是,你必须自己做。
如果您打算在iOS上创建自定义键盘,您一定需要这样做。
它似乎并没有得到范围。我看不到如何获取光标位置或所选字符的范围(如果有)。 – Darrell 2011-05-05 14:11:51
尝试在字段中使用整个文本范围,如下所示:'NSRange range = NSMakeRange(0,theTextField.text.length);' – BHSPitMonkey 2011-05-06 19:21:10
看起来像一个尴尬的工作来改变整个文本时,一个单一的关键被按下,但它可能工作。现在我的问题是我不知道光标位置在哪里插入字符。如果我知道光标位置,我也可以发送正确的范围。 – Darrell 2011-05-09 16:02:36