1

我有一个获取信用卡输入的 UITextField。如何在用户输入第 4 个字符后自动插入破折号,就像用户输入信用卡号时 iOS 的 Groupon 应用程序一样?提前致谢。

4

2 回答 2

0

这比我想的更难。文本更改时发送的常见通知是 UITextFieldTextDidChangeNotification。在 viewDidLoad 方法中,您应该注册以接收此通知并在文本更改时执行选择器。在选择器中,您每 4 个字符添加一个破折号。
在我的代码中,文本字段被命名为textField

- (void)viewDidLoad
{
    [super viewDidLoad];
    NSNotificationCenter* center=[NSNotificationCenter defaultCenter];
    [center addObserver: self selector: @selector(textDidChange:) name: UITextFieldTextDidChangeNotification object: textField];
}

- (void) textDidChange : (NSNotification*) notification
{
    NSString* string=[[textField text] stringByReplacingOccurrencesOfString: @"-" withString: @""];
    __block NSMutableString* newString= [string mutableCopy];
    NSMutableIndexSet* set=[NSMutableIndexSet new];
    for(NSUInteger i=4; i<[string length];i+=4)
    {
        [set addIndex: i+i/4-1];
    }
    [set enumerateIndexesInRange: NSMakeRange(0, [string length]+[string length]/4) options: 0 usingBlock: ^(NSUInteger index, BOOL* stop)
    {
        [newString insertString: @"-" atIndex: index];
    }];
    [textField setText: newString];
}

每 4 个字符添加一个破折号的代码很长,也许有更短的方法。

PS:上一个版本不正确,我编辑了它(无法正确删除字符)。

于 2012-11-13T11:23:23.480 回答
0

这对我来说非常有效:

iOS自动在文本字段中添加连字符

通过“dingo sky”检查答案。

于 2012-11-28T06:37:56.253 回答