使用shouldChangeCharactersInRange来限制输入的字符,但无法检测返回

Jon*_*Cox 4 ios ios5

我在我的UITextField委托中使用以下代码来限制可以输入的字符:

仅供参考:UITextField出口称为nameChoiceField.另外还有一个名为的标签出口errorMessageLabel.

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{
    NSString *potentialNewChosenName = [self.nameChoiceField.text stringByReplacingCharactersInRange:range withString:string];

    NSCharacterSet *nonLettersNumbersOrDashes = [[NSCharacterSet characterSetWithCharactersInString:@"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890- "] invertedSet];

    if ([potentialNewChosenName stringByTrimmingCharactersInSet:nonLettersNumbersOrDashes].length != potentialNewChosenName.length) {
        self.errorMessageLabel.text = @"Only letters, numbers etc allowed.";
        return NO;
    } else {
        self.errorMessageLabel.text = @"That's okay.";
        return YES;
    }
}
Run Code Online (Sandbox Code Playgroud)

哪个工作得很好(只要自动更正关闭,如果你输入其他东西以在你输入2个空格后停止自动完全停止).

然而!当您点击return键盘时,它不允许它(显示错误消息"Only letters ....").


如何限制用户可以输入的内容,并且仍然return可以识别按钮?

此外,是否有任何最佳实践来识别delete上面应该实现的按钮?

Jon*_*Cox 8

结果是:

return由a string表示@"\n"

delete由a string表示@""(具有range确定删除多少的长度).