iphone - xx-xx-xxx 中的 UITextField 格式

标签 iphone objective-c ios uitextfield

我正在使用 UITextField,我希望它应该采用 xx-xx-xxx 格式的字符,只有数字。

有什么帮助吗?

最佳答案

需要为具有可变格式的电话号码很好地执行此操作,这就是我写的内容。随意重用 - 首先我有一个方法来过滤格式化字符串,# 是一个数字,任何其他字符都是某种“填充物”,在用户到达需要它的地方后应该方便地插入.

NSMutableString *filteredPhoneStringFromStringWithFilter(NSString *string, NSString *filter)
{
    NSUInteger onOriginal = 0, onFilter = 0, onOutput = 0;
    char outputString[([filter length])];
    BOOL done = NO;

    while(onFilter < [filter length] && !done)
    {
        char filterChar = [filter characterAtIndex:onFilter];
        char originalChar = onOriginal >= string.length ? '\0' : [string characterAtIndex:onOriginal];
        switch (filterChar) {
            case '#':
                if(originalChar=='\0')
                {
                    // We have no more input numbers for the filter.  We're done.
                    done = YES;
                    break;
                }
                if(isdigit(originalChar))
                {
                    outputString[onOutput] = originalChar;
                    onOriginal++;
                    onFilter++;
                    onOutput++;
                }
                else
                {
                    onOriginal++;
                }
                break;
            default:
                // Any other character will automatically be inserted for the user as they type (spaces, - etc..) or deleted as they delete if there are more numbers to come.
                outputString[onOutput] = filterChar;
                onOutput++;
                onFilter++;
                if(originalChar == filterChar)
                    onOriginal++;
                break;
        }
    }
    outputString[onOutput] = '\0'; // Cap the output string
    return [NSString stringWithUTF8String:outputString];
}

现在他们可以通过填充符删除,我修改了我应该更改范围内的字符。

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {

    NSString *filter = @"(###) ### - ####";

    if(!filter) return YES; // No filter provided, allow anything

    NSString *changedString = [textField.text stringByReplacingCharactersInRange:range withString:string];

    if(range.length == 1 && // Only do for single deletes
       string.length < range.length &&
       [[textField.text substringWithRange:range] rangeOfCharacterFromSet:[NSCharacterSet characterSetWithCharactersInString:@"0123456789"]].location == NSNotFound)
    {
        // Something was deleted.  Delete past the previous number
        NSInteger location = changedString.length-1;
        if(location > 0)
        {
            for(; location > 0; location--)
            {
                if(isdigit([changedString characterAtIndex:location]))
                {
                    break;
                }
            }
            changedString = [changedString substringToIndex:location];
        }
    }

    textField.text = filteredPhoneStringFromStringWithFilter(changedString, filter);

    return NO;
}

这提供了一种非常简洁的方式来强制用户以特定格式输入数字。

关于iphone - xx-xx-xxx 中的 UITextField 格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7709450/

相关文章:

objective-c - 在其父 View 中定位元素

objective-c - IOS:来自 Json 的 LazyLoad 图像

ios - Cocos2d-x 4.0新项目不包含xcodeproj文件

iphone - 创建 plist 时的未知行为

ios - 在您的证书错误上找不到 iPhone 开发者/分发身份

iphone - 如何在 OCMock 中 stub 类方法?

objective-c - iOS 6 上 Facebook 登录失败

ios - 如何将我现有的项目更改为仅适用于 iPhone?

ios - 用于多个/关系下拉选择器的 Swift iOS 解决方案

iphone - 在 UIWebView 中禁用 PDF 文件中的超链接