不 走 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string方法
(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{ //string就是此时输入的那个字符 textField就是此时正在输入的那个输入框 返回YES就是可以改变输入框的值 NO相反
if ([string isEqualToString:@"\n"]) //按会车可以改变
{
return YES;
}
NSString * toBeString = [textField.text stringByReplacingCharactersInRange:range withString:string]; //得到输入框的内容
if (self.textFieldY == textField) //判断是否时我们想要限定的那个输入框
{
if ([toBeString length] > 1) { //如果输入框内容大于20则弹出警告
textField.text = [toBeString substringToIndex:20];
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil message:@"超过最大字数不能输入了" delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
[alert show];
return NO;
}
}
return YES;
}
求大神 解答
不走代理的话 可能的原因是你没有设置textfiled的代理,若果用xib或者stotyboard 记得代理连线
有例子设置 text风格
这里有个自己写的demo,可以参考一下
- (IBAction)onTextFieldEditingChanged:(id)sender {
NSString *lang = [[UITextInputMode currentInputMode] primaryLanguage];
NSRange range = NSMakeRange(0, Max_Character_Num);
if ([lang isEqualToString:@"zh-Hans"]) {//如果输入的时中文
UITextRange *selectedRange = [self.tagNameTextField markedTextRange];
UITextPosition *position = [self.tagNameTextField positionFromPosition:selectedRange.start offset:0];
if (!position) {
if (self.tagNameTextField.text.length > Max_Character_Num) {
// self.tagNameTextField.text = [self.tagNameTextField.text substringFrom:0 to:Max_Character_Num];
self.tagNameTextField.text = [self.tagNameTextField.text substringWithRange:range];
}
}
}else{
if (self.tagNameTextField.text.length > Max_Character_Num) {
self.tagNameTextField.text = [self.tagNameTextField.text substringWithRange:range];
}
}
}
找一下你代理设置的问题。
(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string // return NO to not change text
{
//判断是否超过 ACCOUNT_MAX_CHARS 个字符,注意要判断当string.leng>0
//的情况才行,如果是删除的时候,string.length==0
int length = textField.text.length;
if (length >= ACCOUNT_MAX_CHARS && string.length >0)
{
return NO;
}
// 判断输入的是否为数字 (只能输入数字)
NSString validRegEx =@"^[0-9]$";
NSPredicate *regExPredicate =[NSPredicate predicateWithFormat:@"SELF MATCHES %@", validRegEx];
BOOL myStringMatchesRegEx = [regExPredicate evaluateWithObject:string];
if (myStringMatchesRegEx)
return YES;
else
return NO;
}
主要看看 你加没加代理 加了代理 一般出现代理不启动 就是出现冲突 delegate的地址为nil
输入电话号码即都是数字,但不知道有没有位数限制(因为不知道有没有区分固定电话号码和手机号码)
// 委托方法回调
(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
if ([string isEqualToString:@"\n"])
{
return NO;
}
NSString *tempStr = [textField.text stringByReplacingCharactersInRange:range withString:string];
BOOL boolValue = [self limitInputString:tempStr];
return boolValue;
}
// 限制方法
(BOOL)limitInputString:(NSString *)aString
{
// 限制只能输入数字
NSCharacterSet *numberSet = [NSCharacterSet characterSetWithCharactersInString:@“0123456789"];
NSString *tempStr = aString;
// 但可以输入数字
NSRange numberRange = [tempStr rangeOfCharacterFromSet:numberSet];
if (numberRange.location == NSNotFound)
{
return NO;
}
return YES;
}