Несколько UITextField, нужно переключаться между клавиатурой и UIDatePicker - PullRequest
0 голосов
/ 05 декабря 2010

, на мой взгляд, у меня есть несколько UITextFields, и мне нужно несколько раз показать клавиатуру для ввода текста, а иногда UIDatePicker.

Я приказываю показать DatePicker Я реализовал делегат для даты UITextField, нокак только я выбираю другой UITextField для ввода текста, DatePicker остается в фоновом режиме.Затем я попытался реализовать делегат также для другого UITextField с этим кодом:

- (void)viewDidLoad {
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"dd/MM/yyyy"];
NSString *stringFromDate = [formatter stringFromDate:[NSDate date]];
NSLog(@"IN - AddExpenseViewController::viewDidLoad %s",stringFromDate);
date.text = stringFromDate;

datePicker.hidden = YES;
date.delegate = self;

amount.delegate = self;

isIncome = NO;


[super viewDidLoad]; }

// ...

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{
NSLog(@"IN - AddExpenseViewController::textFieldShouldBeginEditing %@",textField.placeholder);
if (![textField.placeholder isEqual:[NSString stringWithFormat:@"Date"]]) {
    [self hideDatePicker];
    [textField becomeFirstResponder];
    return YES;
}
else {
    [self showDatePicker];
}
return NO;}

Проблема заключается в том, что при выборе даты TextField ичем сумма, делегат вызывается в цикле:

2010-12-05 13: 15: 17.324 AddExpense [1179: 207] IN - AddExpenseViewController :: textFieldShouldBeginEditing Количество 2010-12-05 13: 15: 17.324AddExpense [1179: 207] IN - AddExpenseViewController :: hideDatePicker 2010-12-05 13: 15: 17.325 AddExpense [1179: 207] IN - AddExpenseViewController :: textFieldShouldBeginEditing Количество 2010-12-05 13: 15: 17.326 AddExpense [1179: 207] IN - AddExpenseViewController :: hideDatePicker 2010-12-05 13: 15: 17.327 AddExpense [1179: 207] IN - AddExpenseViewController :: textFieldShouldBeginEditing Количество 2010-12-05 13: 15: 17.327 AddExpense [1179: 207] IN - AddExpenseControl: hideDatePicker

и остановить его невозможно!Что не так с моим кодом?

Заранее спасибо, AM

1 Ответ

1 голос
/ 05 декабря 2010

Всякий раз, когда вы делаете UITextField firstReponder, textFieldShouldBeginEditing: отправляется его делегату.Временное решение может быть

if (![textField.placeholder isEqual:[NSString stringWithFormat:@"Date"]]) {
    [self hideDatePicker];
    textField.delegate = nil;
    [textField becomeFirstResponder];
    textField.delegate = self;
    return YES;
}

Но я рекомендую вам изменить код, чтобы исключить [textField becomeFirstResponder] из этого метода.

...