viniciusmo / VMaskTextField

VMaskTextField is a library which create an input mask for iOS.
MIT License
380 stars 48 forks source link

Wrong masking when setting text programmatically #20

Open juanpdelat opened 7 years ago

juanpdelat commented 7 years ago

Trying to set a phone number programmatically before the user starts typing manually but the results are always wrong. When using textfield.text = ... directly, no mask is applied. When using setTextWithMask: the following happens:

Mask = "(###) ###-####" Text needed: 1234567890, also tried (123) 456-7890 Result: (234) 789-0 Expected: (123) 456-7890

I found a solution in the mean time by setting the text one character at a time:

phoneText.characters.forEach({
    let text = phoneTextField.text ?? ""
    phoneTextField.setTextWithMask( text + String($0) )
})
SeRG1k17 commented 7 years ago

Objective-C:

                for (int i=0; i<phoneText.length; i++) {
                unichar ch = [phoneText characterAtIndex:i];

                NSMutableString *combinedString;
                if (phoneCell.phoneTextField.text) {
                    combinedString=[NSMutableString stringWithString:phoneCell.phoneTextField.text];
                } else {
                    combinedString=[NSMutableString stringWithString:@""];
                }

                NSString *chString = [NSString stringWithFormat:@"%c",ch];
                [combinedString appendString:chString];
                [phoneCell.phoneTextField setTextWithMask: combinedString];
            }
halakaluf commented 6 years ago

I sended a PR with this fix, now we wait.

CavalcanteLeo commented 5 years ago

@halakaluf it crashes =/