Objective c 检测正在按下的删除键

Objective c 检测正在按下的删除键,objective-c,ios,xcode,Objective C,Ios,Xcode,我四处寻找了一些方法来检测何时按下了delete键。我偶然发现了苹果的密钥处理文档,还有一些人正在尝试解决这个问题。我不确定该采用哪种方法。我想做的很简单: -(void)deleteKeyWasPressed { if (myTextField.text.length == 0) { [previousTextField becomeFirstResponder]; } } 但据我所知,这种方法并不存在 这样做的最佳方式是什么 iOS不直接支持检测delete键(或除Return之

我四处寻找了一些方法来检测何时按下了delete键。我偶然发现了苹果的密钥处理文档,还有一些人正在尝试解决这个问题。我不确定该采用哪种方法。我想做的很简单:

-(void)deleteKeyWasPressed {

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

[previousTextField becomeFirstResponder]; 

}

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


这样做的最佳方式是什么

iOS不直接支持检测delete键(或除Return之外的任何键)。您最好实现
textField:shouldChangeCharactersRange:replacementString:
delegate方法。当用户点击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;
}

iOS不直接支持检测delete键(或除Return之外的任何键)。您最好实现
textField:shouldChangeCharactersRange:replacementString:
delegate方法。当用户点击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;
}

我实现它的方法是将textfield的前一个长度保存在某处,然后将前一个长度与当前长度进行比较。如果上一个长度大于当前长度,则按delete键。对我来说效果很好。

我实现它的方法是将文本字段的前一个长度保存在某个地方,然后将前一个长度与当前长度进行比较。如果上一个长度大于当前长度,则按delete键。对我来说效果很好。

当用户选择一些文本,然后从剪贴板粘贴文本,并且粘贴的文本比所选文本短时,这种想法无法处理这种情况。这一点很好。这在我的实现中不是一个风险,但对他的实现来说可能是一个风险。当用户选择一些文本,然后从剪贴板粘贴文本,并且粘贴的文本比选择的文本短时,这种想法不适用。这一点很好。这在我的实现中不是一个风险,但对他来说可能是一个风险。回答不错,但在粘贴、剪切或删除时不起作用。调用了该方法,但由于某些原因,该方法的内容大小没有更新。我认为在文本视图中更改文本之前,或者在更改文本内容之前调用此方法是的,当用户剪切、删除或粘贴时调用此方法。是的,它是在实际更改之前调用的。这就是重点。
字符串
参数将反映哪个参数。如果用户执行剪切或删除,则
字符串
将是空字符串,范围将是被剪切或删除的范围。如果用户正在粘贴,
字符串
将是新文本,范围将是被替换的范围。谢谢@rmaddy。我最终通过调用
performSelector:afterDelay:
解决了我的问题,并在调用
textField:shouldchangeCharactersRange:replacementString:
后0.1秒执行我需要的操作。这不是一个很好的方法,但目前它对我来说很有效。回答不错,但当你粘贴、剪切或删除时,它就不起作用了。调用了该方法,但由于某些原因,该方法的内容大小没有更新。我认为在文本视图中更改文本之前,或者在更改文本内容之前调用此方法是的,当用户剪切、删除或粘贴时调用此方法。是的,它是在实际更改之前调用的。这就是重点。
字符串
参数将反映哪个参数。如果用户执行剪切或删除,则
字符串
将是空字符串,范围将是被剪切或删除的范围。如果用户正在粘贴,
字符串
将是新文本,范围将是被替换的范围。谢谢@rmaddy。我最终通过调用
performSelector:afterDelay:
解决了我的问题,并在调用
textField:shouldchangeCharactersRange:replacementString:
后0.1秒执行我需要的操作。这不是一个好方法,但目前对我来说是可行的。