【发布时间】:2014-09-20 07:18:45
【问题描述】:
我让用户使用以下代码填写电话号码。一切都很好,除了我在同一个视图控制器中有多个文本字段,即姓名、电话号码、电子邮件。使用当前代码,它会锁定并且不允许从除电话号码字段之外的任何其他字段输入。
我的问题是如何指定仅适用于此 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;
}
【问题讨论】:
-
你到底想实现什么?
-
你需要结果只允许电话文本字段中的数字吗,如果是,请设置电话文本字段的标签
-
我需要电话号码文本字段来格式化数字,并保留其他文本字段
标签: ios objective-c nsstring uitextfield