textField直接监听长度,到了一定长度就不能编辑,有时候这样设置很尴尬的是删除的删除不了,现在直接贴出代码
/* range: UITextField控件中光标选中的字符串,即被替换的字符串;
range.length为0时,表示在位置range.location插入string。
string: 替换字符串;
string.length为0时,表示删除。
*/
//输入40个后就不能输入了
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
NSInteger existedLength = textField.text.length;
NSInteger selectedLength = range.length;
NSInteger replaceLength = string.length;
if (existedLength - selectedLength + replaceLength > 40) {
return NO;
}
return YES;
}
这样设置后有时输入法联想出来的词会突破这个限制,这是就要截取一下了
- (void)textFieldDidChange:(UITextField *)textField
{
if (textField.text.length > 40) {
textField.text = [textField.text substringToIndex:40];
}
}
有时候我们希望一个输入框的到的是一个数字,但是复制粘贴进去的有可能是文字,这个时候就要做一个判断了
- (BOOL)validateNumber:(NSString*)number {
BOOL res =YES;
NSCharacterSet* tmpSet = [NSCharacterSet characterSetWithCharactersInString:@"0123456789"];
int i =0;
while (i < number.length) {
NSString * string = [number substringWithRange:NSMakeRange(i,1)];
NSRange range = [string rangeOfCharacterFromSet:tmpSet];
if (range.length ==0) {
res =NO;
break;
}
i++;
}
return res;
}
在- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string这个方法中直接返回return [self validateNumber:string];就可以了