当textfield:shouldChangeCharactersInRange:replacementString:在iOS iOS 9上返回NO,它会崩溃

时间:2016-09-12 13:39:20

标签: ios

我想限制UITextField文本的长度,然后实现UITextFieldDelegate方法:

(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString*)string {
return textField.text.length + string.length < 20;}

在iPad和iOS 9上,键盘将在键盘的左上角显示三个按钮。当文本的长度达到最大数量时,该方法将返回NO。首先我点击按钮3,然后按下按钮1.为什么崩溃我的应用程序?

My GUI image and buttons

1 个答案:

答案 0 :(得分:-1)

试试这个,

 -(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{


if ( textField.text.length + string.length > 20) {

    return NO;
}

if (range.location == 20) {

    return NO;
}

    return YES;


}

因为当您按undoredo按钮时,它会调用substringWithRange,并且您的应用程序崩溃的范围无效!

您可以通过在shouldChangeCharactersInRange方法中添加断点来更好地检查它。每次都检查rangestring的值!