我有一个用户使用以下代码填写电话号码。除了在同一个视图控制器中有多个文本字段(即名称,电话号码,电子邮件)外,其他所有内容都运行良好。使用当前代码,它会锁定,并且除了电话号码字段之外,不允许其他任何输入。
我的问题是我如何指定仅适用于此UI文本字段的代码?
- (BOOL)textField:(UITextField *)pilotPhone shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
NSString *newString = [_phoneField.text stringByReplacingCharactersInRange:range withString:string];
NSArray *components = [newString componentsSeparatedByCharactersInSet:[[NSCharacterSet decimalDigitCharacterSet] invertedSet]];
NSString *decimalString = [components componentsJoinedByString:@""];
NSUInteger length = decimalString.length;
BOOL hasLeadingOne = length > 0 && [decimalString characterAtIndex:0] == '1';
if (length == 0 || (length > 10 && !hasLeadingOne) || (length > 11)) {
_phoneField.text = decimalString;
return NO;
}
NSUInteger index = 0;
NSMutableString *formattedString = [NSMutableString string];
if (hasLeadingOne) {
[formattedString appendString:@"1 "];
index += 1;
}
if (length - index > 3) {
NSString *areaCode = [decimalString substringWithRange:NSMakeRange(index, 3)];
[formattedString appendFormat:@"(%@) ",areaCode];
index += 3;
}
if (length - index > 3) {
NSString *prefix = [decimalString substringWithRange:NSMakeRange(index, 3)];
[formattedString appendFormat:@"%@-",prefix];
index += 3;
}
NSString *remainder = [decimalString substringFromIndex:index];
[formattedString appendString:remainder];
_phoneField.text = formattedString;
return NO;
}
如果只想对电话号码文本字段执行上述代码,只需将所有代码放在if条件中,如下所示:
- (BOOL)textField:(UITextField *)pilotPhone shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
// here self.txtPhoneNumber is ur phone number textfield
if(pilotPhone == self.txtPhoneNumber)
{
NSString *newString = [_phoneField.text stringByReplacingCharactersInRange:range withString:string];
// all other code ---------
return NO;
}
return YES;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句