【问题标题】:Phone numer formatting to display in only phone number text field电话号码格式仅显示在电话号码文本字段中
【发布时间】: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


【解决方案1】:

如果您只想对电话号码文本字段执行上述代码,只需将所有代码放入 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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-01
    • 2012-08-11
    • 2012-07-16
    • 2016-05-04
    • 1970-01-01
    相关资源
    最近更新 更多