2015-06-19 10 views
0

У меня есть uitextfield с форматом: DD/MM/YYYY, например: 12/03/1982 Я хочу, чтобы пользователь вводил «2» и «3», это поле будет вставляться '/' после них автоматически. Я выполнил это в методе:Автоматически вставить поле «/» в поле даты

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

с проверкой:

NSString *wholeTextName = 
[textField.text stringByReplacingCharactersInRange:range 
             withString:string]; 
LogDebug(@"WholeText: %@", wholeTextName); 


    if ([textField isEqual:self.dateOfBirthTextField]) 
    { 
     if (([wholeTextName length] == 2)||(([wholeTextName length] == 5))) { 
     textField.text=[wholeTextName stringByAppendingString:@"/"]; 
     } 

но когда я печатаю на '2', результат на этом текстовом поле является: '12/2' не '12/'= ожидаемый результат Не могли бы вы предложить мне, пожалуйста?

+0

Лучшим вариантом было бы изменить вид ввода текстового поля в подборщик даты. – Fogmeister

+0

спасибо @Fogmeister, но в моем случае требуется использовать UITextfield –

+0

Нет, вы неправильно поняли. Используйте UITextField с входным представлением UIDatePicker. Затем он будет использовать datePicker для заполнения UITextField вместо клавиатуры. Это также означает, что вы получаете бесплатную проверку даты. Например, что произойдет, если пользователь наберет «29/02/2015»? Или что произойдет, если они напечатают «03/02/2015»? Это 3 февраля? Или это 2 марта? – Fogmeister

ответ

0

Вы можете использовать 3 текстовые поля для дня, месяца и года вместо 1.eg-

[textfeild_day] [label for "/"] [textfeild_month] [label for "/"] [textfeild_year]

1

Используйте ниже код для реализации нужного результата или текстовое поле Проверка.

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{ 
    NSString *wholeString = textField.text; 
    if ((wholeString.length == 2 || wholeString.length == 5) && ![string isEqualToString:@""]) 
    { 
     wholeString = [wholeString stringByAppendingString:@"/"]; 
     textField.text = wholeString; 
    } 
    else if(wholeString.length == 10 && ![string isEqualToString:@""]) 
    { 
     return NO; 
    } 

    return YES; 
} 

Здесь я добавил еще, если условие, чтобы ограничить более 10 символов и еще одно условие ![string isEqualToString:@""], так что даже если вы входите забой, он будет работать нормально.

Смежные вопросы