Как форматировать текст UITextField в режиме реального времени, когда он редактируется?
Как изменить значение текста UITextField
во время ввода?
Другими словами:
когда я печатаю 1, он должен показать 1
когда я печатаю 10, он должен показать 10
когда я набираю 100, он должен показать 100
но
когда я печатаю 1000, он должен показать 1000
Вы можете дать какие-либо идеи?
Ответы
Ответ 1
Добавить метод уведомления textFieldDidChange в текстовое поле.
[textField addTarget:self
action:@selector(textFieldDidChange:)
forControlEvents:UIControlEventEditingChanged];
-(void)textFieldDidChange:(UITextField *)theTextField
{
NSLog(@"text changed: %@", theTextField.text);
NSString *textFieldText = [theTextField.text stringByReplacingOccurrencesOfString:@"," withString:@""];
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
NSString *formattedOutput = [formatter stringFromNumber:[NSNumber numberWithInt:[textFieldText integerValue]]];
textField.text=formattedOutput;
}
Ответ 2
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init] ;
if([string length]==0)
{
[formatter setGroupingSeparator:@","];
[formatter setGroupingSize:4];
[formatter setUsesGroupingSeparator:YES];
[formatter setSecondaryGroupingSize:3];
NSString *num = textField.text ;
num = [num stringByReplacingOccurrencesOfString:@"," withString:@""];
NSString *str = [formatter stringFromNumber:[NSNumber numberWithDouble:[num doubleValue]]];
textField.text = str;
return YES;
}
else {
[formatter setGroupingSeparator:@","];
[formatter setGroupingSize:2];
[formatter setUsesGroupingSeparator:YES];
[formatter setSecondaryGroupingSize:3];
NSString *num = textField.text ;
if(![num isEqualToString:@""])
{
num = [num stringByReplacingOccurrencesOfString:@"," withString:@""];
NSString *str = [formatter stringFromNumber:[NSNumber numberWithDouble:[num doubleValue]]];
textField.text = str;
NSLog(@"add:%@",str);
}
return YES;
}
}
P.S. Этот код находится в ARC
, позаботится об управлении памятью в не дуговой среде.
Ответ 3
Swift:
Обязательно выберите текстовое поле в качестве цифровой клавиатуры, затем:
В вашем представленииDidLoad:
yourTextField(self, action: #selector(self.textFieldDidChange(textField:)), for: .editingChanged)
Затем в том же контроллере представления:
func textFieldDidChange(textField: UITextField) {
if textField == yourTextField {
// Some locales use different punctuations.
var textFormatted = textField.text?.replacingOccurrences(of: ",", with: "")
textFormatted = textFormatted?.replacingOccurrences(of: ".", with: "")
let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = .decimal
if let text = textFormatted, let textAsInt = Int(text) {
textField.text = numberFormatter.string(from: NSNumber(value: textAsInt))
}
}
}
Ответ 4
Попробуйте это. Вы можете написать следующую строку в методе ViewDidLoad
и предоставить делегату текстовое поле.
[textField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];
и напишите следующий метод.
-(void)textFieldDidChange:(UITextField*)textfield{
NSLog(@"here %@",textfield.text);
if ([textfield.text isEqualToString:@"1000"]) {
[email protected]"1,000";
}
}