2011-09-07 10 views
17

volví mi botón de la barra izquierda de UINavigationController como botón de edición utilizando el código¿Cómo puedo identificar el evento clicked del botón Self.editButtonItem?

leftBarButton = self.editButtonItem; 

Quiero cambiar algunas activar/desactivar las propiedades de otros botones con respecto a la acción de clic en el botón Editar.

¿Cómo puedo saber si el botón Editar está presionado o no?

Respuesta

31

La acción del botón editar envía al controlador de vista el mensaje setEditing:animated. Anule esto en su subclase para realizar otras acciones al ingresar o salir del modo de edición.

Asegúrese de llamar a la implementación super al final para administrar el resto de la transición a la vista de edición.

+0

Gracias por su información ... Pero, si yo uso el 'setEditing: animated' método , las animaciones y el botón de menos el color rojo no aparecieron – Confused

+0

Tiene que llamar '[super setEditing: editing animado: animado]' al final de su override. – jrturton

+0

Gracias ... funciona ... – Confused

1
UIBarButtonItem *barBut=[[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemEdit target:self action:@selector(doSomething)]; 


self.navigationItem.leftBarButtonItem=barBut; 

[barBut release]; 


.h 
-(void)doSomething; 

.m 

-(void)doSomething{ 

    NSLog(@"dooooooooooooo"); 
     //ur stuff 
} 

actualización:

- (void)setEditing:(BOOL)editing animated:(BOOL)animated 

se llamará

editButtonItem 

Returns a bar button item that toggles its title and associated state between Edit and Done. 

- (UIBarButtonItem *)editButtonItem 

Discussion 
If one of the custom views of the navigationItem property is set to the returned object, the associated navigation bar displays an Edit button if editing is NO and a Done button if editing is YES. The default button action invokes the setEditing:animated: method. 

    Availability 
    Available in iOS 2.0 and later. 

    See Also 
    @property editing 

    – setEditing:animated: 


    Declared In 
    UIViewController.h 

http://developer.apple.com/library/ios/#DOCUMENTATION/UIKit/Reference/UIViewController_Class/Reference/Reference.html

+0

Gracias vijay .. Pero quiero saber el escenario para el botón self.editButtonItem – Confused

18

Así que finalmente me dieron la solución ...

-(void)setEditing:(BOOL)editing animated:(BOOL)animated { 

    [super setEditing:editing animated:animated]; 

    if(editing) { 
     //Do something for edit mode 
    } 

    else { 
     //Do something for non-edit mode 
    } 

} 

Se llamará a este método sin cambiar el comportamiento original del botón self.editButtonItem.

+0

El segundo método nunca debe ser utilizado. –

7

En Swift:

@IBOutlet weak var tableView: UITableView! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    .... 
    self.navigationItem.leftBarButtonItem = self.editButtonItem() 
} 

override func setEditing(editing: Bool, animated: Bool) { 
    // Toggles the edit button state 
    super.setEditing(editing, animated: animated) 
    // Toggles the actual editing actions appearing on a table view 
    tableView.setEditing(editing, animated: true) 
} 
2

En Swift se puede seguir los métodos siguientes:

@IBOutlet weak var tableView: UITableView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     navigationItem.rightBarButtonItem = editButtonItem() 
    } 

    override func setEditing(editing: Bool, animated: Bool){ 

     super.setEditing(editing, animated: animated) 
     tableView.setEditing(editing, animated: true) 


    } 
+0

en serio, una rama 'if (editing)' cuando podrías haber dicho 'tableView.setEditing (editing, animation: animated)' y hacer que funcione para ambos casos? – Alnitak

+0

funciona pero técnicamente estás en lo correcto gracias a la sugerencia –

+0

Funciona bien en UITableView dentro de UIViewController. – yoshitech

Cuestiones relacionadas