2011-05-25 3 views
4

Comment ajouter un bouton terminé à une barre UINavigation lorsque l'utilisateur touche un champ de texte ou un textview spécifique?Ajouter un bouton terminé dans une barre UINavigation

Ou serait un meilleur moyen de détecter lorsque le clavier est affiché, puis afficher le bouton.

Je voudrais que le bouton fait pour rejeter le clavier comme dans l'application Notes standard.

Répondre

6

Vous pouvez essayer quelque chose de similaire à ceci:

- (void)textFieldDidBeginEditing:(UITextField *)textField 
{  
    UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone 
                       target:self 
                       action:@selector(doneEditing)]; 
    [[self navigationItem] setRightBarButtonItem:doneButton]; 
    [doneButton release]; 
} 

et aussi

- (void)textViewDidBeginEditing:(UITextView *)textView 
{  
    UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone 
                       target:self 
                       action:@selector(doneEditing)]; 
    [[self navigationItem] setRightBarButtonItem:doneButton]; 
    [doneButton release]; 
} 

avec ce qui suit personnalisé que vous aimez

- (void)doneEditing { 
    [[self view] endEditing:YES]; 
} 

puis retirer le bouton dans - (void)textFieldDidEndEditing:(UITextField *)textField et aussi en - (void)textViewDidEndEditing:(UITextView *)textView

N'oubliez pas de mettre en place les délégués!

+0

Merci. J'ai un textfield et un textview. Y a-t-il un délégué similaire pour textview? – jarryd

+0

Oui. Consultez la documentation: http://developer.apple.com/library/ios/#documentation/uikit/reference/UITextViewDelegate_Protocol/Reference/UITextViewDelegate.html – PengOne

2

Vous devriez adopter le protocole de délégué car je crois que vous y trouvez un avantage. Vous pouvez le faire -

- (void)textViewDidBeginEditing:(UITextView *)textView { 
    UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone 
                       target:textView 
                       action:@selector(resignFirstResponder)]; 
    self.navigationItem.rightBarButtonItem = doneButton; 
    [doneButton release]; 
} 

Mais si vous deviez observer la notification, vous ne pouvez pas savoir que l'on est le premier intervenant. Bien sûr, ce n'est pas vraiment un problème si vous n'avez qu'un seul objet à vous soucier.

Questions connexes