2009-10-30 7 views
7

Je travaille sur une vue de l'iPhone qui a composé 3 éléments, UITextView, UIToolBar avec un UIBarButtonItem. Le but est, je veux que UIBarButtonItem change son style de 'edit' (UIBarButtonSystemItemEdit) à 'Done' (UIBarButtonSystemItemDone) et mette à jour le nouveau sélecteur à la nouvelle méthode.Comment changer le type de UIBarButtonItem dans UINaviagationBar lors de l'exécution?

D'abord, je l'ai essayé code suivant mais il ne fonctionne pas:

Pourriez-vous me aider sur cette idée?

Répondre

14

Il existe un bouton de barre intégré avec ce comportement, vous l'obtenez via la propriété editButtonItem d'un UIViewContoller. Tabulation de ce bouton va changer le contrôleur de vue, il est venu en mode d'édition, et basculer le bouton dans un bouton fait.

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    self.navigationItem.rightBarButtonItem = self.editButtonItem; 
} 
+0

merci beaucoup! meilleure réponse avec une vraie solution pour toutes les questions similaires! – itinance

4

pour changer le bouton le bouton Terminé utiliser cette

[self.navigationItem.rightBarButtonItem setStyle:UIBarButtonItemStyleDone]; 

changer le bouton pour le bouton Modifier utiliser ce

[self.navigationItem.rightBarButtonItem setStyle:UIBarButtonItemStyleBordered]; 
5

Si vous avez ajouté le bouton par IB puis assurez-vous pour définir l'identificateur sur Personnalisé Allouer également un bouton dans le fichier .h avec IBOutlet et propriété appropriés Synthétiser le bouton dans .m

Puis dans votre code procédez comme suit:

// Set to done 
editButton.style = UIBarButtonItemStyleDone; 
editButton.title = @"Done"; 

// Set back to edit 
editButton.style = UIBarButtonItemStyleBordered; 
editButton.title = @"Edit"; 
2

je fini par faire quelque chose comme ça. Malheureusement, définir le titre directement n'a pas fonctionné, pour une raison quelconque, il était nul et ne me laisserait pas le définir à une valeur différente. Le self.editButton provient d'un IBOutlet avec la cible et les actions définies. Ce code utilise ARC. J'espère que ça aidera quelqu'un.

 NSString *title = app.settings.editing 
         ? NSLocalizedString(@"Done", @"") 
         : NSLocalizedString(@"Edit", @""); 

     UIBarButtonItemStyle style = app.settings.editing 
            ? UIBarButtonItemStyleDone 
            : UIBarButtonItemStyleBordered; 

     UIBarButtonItem *editButton 
      = [[UIBarButtonItem alloc] initWithTitle:title 
               style:style 
               target:self.editButton.target 
               action:self.editButton.action]; 

     self.navigationItem.rightBarButtonItem = editButton;