2011-05-04 51 views
7

我已经在iOS应用程序中实现了自定义键盘视图。我有几个使用此键盘的UITextFields。其中一些UITextFields的代理可以覆盖shouldChangeCharactersInRange。但是,如果我的键盘只是在文本字段中设置文本值,则不会发送shouldChangeCharactersInRange消息。我想我需要的是实际执行SendKey之类的操作,并将密钥代码发送到UITextField。iOS:如何将密钥发送给UITextField?

有什么建议吗?

回答

-1

听起来好像键盘负责将shouldChangeCharactersInRange消息发送给UITextField本身,而不仅仅是设置它的值。让你的键盘计算的rangestring的值,并调用:

if ([[theTextField delegate] textField:theTextField shouldChangeCharactersInRange:range replacementString:string]) 
    theTextField.text = [theTextField.text stringByReplacingCharactersInRange:range withString:string]; 
+0

它似乎并没有得到范围。我看不到如何获取光标位置或所选字符的范围(如果有)。 – Darrell 2011-05-05 14:11:51

+0

尝试在字段中使用整个文本范围,如下所示:'NSRange range = NSMakeRange(0,theTextField.text.length);' – BHSPitMonkey 2011-05-06 19:21:10

+0

看起来像一个尴尬的工作来改变整个文本时,一个单一的关键被按下,但它可能工作。现在我的问题是我不知道光标位置在哪里插入字符。如果我知道光标位置,我也可以发送正确的范围。 – Darrell 2011-05-09 16:02:36

5

As I note in my answer hereUITextField符合UITextInput协议。所以,你调用它的方法:

[textField replaceRange:textField.selectedTextRange withText:text]; 

有趣的是:""将执行退格,当然," "会做的空间。

这应该自动调用shouldChangeCharactersInRange方法。如果不是,你必须自己做。

如果您打算在iOS上创建自定义键盘,您一定需要这样做。

+1

我正在寻找一种方法来通过按下自定义UIButton来从UITextField中删除单个字符,即使光标在文本字段的末尾是* not *。答案就是这样(感谢“关注......”部分),感谢一百万(+1)! – pille 2012-05-22 11:31:29

+1

'[textField replaceRange:textField.selectedTextRange withText:text]'不调用'shouldChangeCharactersInRange'。 – memmons 2013-12-01 20:11:31