2010-12-05 5 views
0

à mon avis J'ai plusieurs UITextFields et j'ai besoin de montrer parfois un keybord pour la saisie de texte et d'autres fois un UIDatePicker.Plusieurs UITextField, besoin de basculer entre le clavier et UIDatePicker

Je commande pour afficher un DatePicker J'ai implémenté le délégué pour la date UITextField, mais une fois que je sélectionne un autre UITextField pour la saisie de texte, le DatePicker reste en arrière-plan. Ensuite, j'ai essayé de mettre en œuvre le délégué a également pour une autre UITextField, avec ce code:

- (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;} 

Le problème est que lorsque je sélectionne la date TextField et que le montant, le délégué est appelé en boucle:

2010-12-05 13: 15: 17,324 AddExpense [1179: 207] IN - AddExpenseViewController :: textFieldShouldBeginEditing Montant 2010-12-05 13: 15: 17,324 AddExpense [1179: 207 ] IN - AddExpenseViewController :: hideDatePicker 2010-12-05 13: 15: 17.325 AddExpense [1179: 207] IN - AddExpenseViewController :: textFieldShouldBeginEditing Quantité 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 Montant 2010-12-05 13: 15: 17,327 AddExpense [1179: 207] IN - AddExpenseViewController :: hideDatePicker

et il est pas moyen de l'arrêter! Quel est le problème avec mon code?

Merci à l'avance, AM

Répondre

1

Chaque fois que vous faites UITextField firstReponder, textFieldShouldBeginEditing: est envoyé à son délégué. Une solution temporaire pourrait être

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

Mais je vous recommande de remanier votre code pour exclure [textField becomeFirstResponder] de cette méthode.

+0

Salut, je sais que textFieldShouldBeginEditing: est envoyé à chaque fois, mais je ne comprends pas pourquoi c'est en boucle sur cette méthode! Je m'attendrais à le voir appelé juste une fois, pour ne pas avoir mon programme verrouillé par ceci ... – wheisenberg

+1

textFieldShouldBeginEditing: -> [textField becomeFirstResponder] -> truc interne -> textFieldShouldBeginEditing: -> [textField becomeFirstResponder] -> truc interne -> ... – Kentzo

Questions connexes