2012-11-26 34 views
1

我查看了各种方法来检测何时按下删除键。我遇到了苹果的关键处理文档,也有人尝试使用这种方法。我不确定采用哪种方法。我想要做的事很简单:检测正在按下的删除键

-(void)deleteKeyWasPressed { 

if (myTextField.text.length == 0) { 

[previousTextField becomeFirstResponder]; 

} 

} 

但据我所知,这种方法不存在。

这样做的最好方法是什么?

回答

6

iOS没有直接支持检测删除键(或Return以外的任何键)。你可以做的最好的是实现textField:shouldChangeCharactersInRange:replacementString:委托方法。当用户点击Delete键时,替换字符串将是空字符串。

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { 
    if (string.length == 0) { 
     // handle Delete (but this also handles the Cut menu as well) 
    } else { 
     // some other key or text is being pasted. 
    } 

    return YES; 
} 
+0

不错的答案,但在粘贴,剪切或删除时不起作用。该方法被调用,但由于某种原因,内容大小没有更新。我认为在更改文本视图中的文本或更改文本内容之前调用此方法 – IgniteCoders

+1

是的,当用户剪切,删除或粘贴时调用此方法。是的,它是在实际改变之前调用的。这才是重点。 'string'参数将反映哪个。如果用户做了剪切或删除操作,'string'将是空字符串,范围将被剪切或删除。如果用户正在粘贴,“string”将是新文本,范围将被替换。 – rmaddy

+0

谢谢@rmaddy。我终于通过调用'performSelector:afterDelay:'来解决我的问题,并且我在'textField:shouldChangeCharactersInRange:replacementString:'被调用后需要0.1秒的时间来做我所需要的。这不是一个好的方法,但现在这对我来说很有用。 – IgniteCoders

1

,我已经实现了它是保存文本字段的长度以前的某个地方,然后以前的长度比较当前长度的方式。如果前一个长度大于当前长度,则按下删除键。适合我。

+0

这个想法不处理用户选择一些文本然后粘贴剪贴板中的文本并且粘贴的文本短于所选文本的情况。 – rmaddy

+0

好点。这在我的实施中不是一个风险,但可能是他的一个风险。 –