2009-10-30 45 views
7

Estoy trabajando en la vista de un iPhone que compuso 3 elementos, UITextView, UIToolBar con un UIBarButtonItem.¿Cómo cambiar el tipo de UIBarButtonItem en UINaviagationBar en tiempo de ejecución?

El objetivo es, quiero que UIBarButtonItem cambie su estilo de 'editar' (UIBarButtonSystemItemEdit) a 'Hecho' (UIBarButtonSystemItemDone) y actualice el nuevo selector a un nuevo método.

En primer lugar, he intentado siguiente código pero no funciona:

¿Me podría ayudar en esta idea?

Respuesta

14

Hay un botón de barra integrado con este comportamiento, lo obtiene a través de la propiedad editButtonItem de un UIViewContoller. Al marcar ese botón, cambiará el controlador de vista del que procede al modo de edición, y alternará el botón en un botón hecho.

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

muchas gracias! ¡la mejor respuesta con una solución real para todas las preguntas similares! – itinance

4

para cambiar el botón el botón Done utilizar este

[self.navigationItem.rightBarButtonItem setStyle:UIBarButtonItemStyleDone]; 

para cambiar el botón para editar botón de utilizar este

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

Si ha añadido el botón a través del IB a continuación, asegúrese para configurar el identificador en Custom También asigne un botón en .h con IBOutlet y propiedad correspondientes Sintetice el botón en .m

Luego, en su código haga lo siguiente:

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

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

que terminé haciendo algo como esto. Desafortunadamente, configurar el título directamente no funcionó, por alguna razón era nulo y no me dejaba establecerlo en un valor diferente. El self.editButton proviene de un IBOutlet con el objetivo y las acciones establecidas. Este código usa ARC. Espero que esto ayude a alguien.

 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; 
Cuestiones relacionadas