我想限制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.为什么崩溃我的应用程序?
答案 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;
}
因为当您按undo
或redo
按钮时,它会调用substringWithRange
,并且您的应用程序崩溃的范围无效!
您可以通过在shouldChangeCharactersInRange
方法中添加断点来更好地检查它。每次都检查range
和string
的值!