2010-04-03 4 views
7

J'essaie de configurer une liste d'éléments pouvant être modifiés. J'ai une vue principale, avec un UINavigationBar en haut et un UITableView directement en dessous. J'aimerais que mon bouton "modifier" change pour un bouton "terminé", mais je ne sais pas comment le faire.Comment modifier un UIBarButtonItem dans un UINavigationBar

Si je pouvais le faire dans le code (pas le constructeur de l'interface), je pourrais juste le remplacer, mais je ne peux même pas le faire. J'ai vu du code en utilisant [self.navigationItem], mais dans mon cas self est un UIView.

Il me semble également un peu étrange d'utiliser un UINavigationBar quand je ne veux pas de navigation (c'est une page seulement), mais je veux une barre d'outils avec un titre et un bouton, donc je ne pense pas vraiment Avoir le choix.

Répondre

15

Je crée un bouton qui peut changer d'Édition à Terminé. C'est un conseil de plus de livre de développement iPhone.

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    UIBarButtonItem *editButton = self.editButtonItem; 
    [editButton setTarget:self]; 
    [editButton setAction:@selector(toggleEdit)]; 
    self.navigationItem.leftBarButtonItem = editButton; 
} 

Et la méthode toggleEdit

- (IBAction)toggleEdit { 
    BOOL editing = !self.tableView.editing; 
    self.navigationItem.rightBarButtonItem.enabled = !editing; 
    if (editing) { 
    self.navigationItem.leftBarButtonItem.title = NSLocalizedString(@"Done", @"Done"); 
    //Added in the edition for this button has the same color of the UIBarButtonSystemItemDone 
    self.navigationItem.leftBarButtonItem.style = UIBarButtonItemStyleDone; 
} 
else{ 
    self.navigationItem.leftBarButtonItem.title = NSLocalizedString(@"Edit", @"Edit"); 
    //Added in the edition for this button has the same color of the UIBarButtonSystemItemDone 
    self.navigationItem.leftBarButtonItem.style = UIBarButtonItemStylePlain; 
} 
    [self.tableView setEditing:editing animated:YES]; 
} 

vous n'avez pas besoin de remplacer l'un d'eux.

+0

Ah, ouais, ça semble bon. Cependant, je ne pense pas que vous obteniez ce joli style "Done" de cette façon, où le bouton est une couleur légèrement différente. –

+0

Maintenant, avec le changement de style, le bouton DONE de ce code est exactement égal à UIBarButtonSystemItemDone. – wal

0

Got it! On dirait que vous pouvez accéder à UINavigationItem en utilisant la propriété topItem. Juste dû lire les docs, comme toujours!

4

Lorsque vous utilisez self.editButtonItem, vous n'avez pas besoin de changer le style et le texte du bouton, c'est fait automatiquement. Essayez de supprimer ce code, il fonctionnera toujours :)

2

mettre en place le bouton nav dans IB avec le lien suivant dans IB et créer une sortie appelée editOutlet et une action appelée editToggle dans votre fichier d'en-tête et votre méthode est aussi facile que ceci:

-(IBAction) editToggle:(id) sender { 

if (self.tableViewOutlet.isEditing == NO) { 

    self.editOutlet.title = NSLocalizedString(@"Done", @"Done"); 
    self.editOutlet.style = UIBarButtonItemStyleDone; 
    [self.tableViewOutlet setEditing:YES animated:YES]; 

}else { 
    self.editOutlet.title = NSLocalizedString(@"Edit", @"Edit"); 
    self.editOutlet.style = UIBarButtonItemStylePlain; 
    [self.tableViewOutlet setEditing:NO animated:YES]; 

    } 
} 
0

vous pouvez essayer

[self setValue:viewController.navigationItem forKey:@"_navigationItem"]; 
[self.navigationController setNavigationBarHidden:YES animated:NO]; 
[self.navigationController setNavigationBarHidden:NO animated:NO]; 
Questions connexes