2011-09-12 21 views
19

¿Cómo puedo implementar un botón en la barra de navegación por el cual el usuario podría reordenar & borrar las filas de una UITableView?UITableView Edit/Done Button

¿Tengo que crear mi propio botón en la barra de herramientas para tener el botón Editar/Listo para mi UITableView?

Respuesta

44

Sólo añadir esta línea en viewDidLoad de su UITableViewController

self.navigationItem.leftBarButtonItem = self.editButtonItem; 

Funcionará si su vista de tabla supervista es UINavigationController. Esta línea agregará un botón que empujará la tabla en el modo de edición y fuera de ella.

+0

intenté, aunque el botón está ahí, pero no empuja mi tableView dentro y fuera del modo de edición. ¿Hay alguna llamada de delegado que deba manejar? –

+1

es su controlador de vista una subclase de uitableviewcontroller – Robin

+0

@robin. No, no es así. –

20

Lo que generalmente se hace es crear su propia costumbre BarbuttonItem y luego asignar este botón como derecho elemento botón de la barra de navegación:

UIBarButtonItem *barButtonItem=[[UIBarButtonItem alloc]initWithTitle:@"Edit" 
                   style:UIBarButtonItemStylePlain 
                   target:self 
                   action:@selector(toggleEdit)]; 

self.navigationItem.rightBarButtonItem = barButtonItem; 
[barButtonItem release]; 

Aquí está el método toggleEdit:

-(void)toggleEdit{ 
      [self.tableView setEditing:!self.tableView.editing animated:YES]; 

      if (self.tableView.editing) 
       [self.navigationItem.rightBarButtonItem setTitle:@"Done"]; 
      else 
      [self.navigationItem.rightBarButtonItem setTitle:@"Edit"]; 
} 
0

si desea que su botón para alternar entre el color azul "Hecho" y el color "Editar" sin formato, puede configurar el derechoBarButtonItem en UIBarButtonItemStyleDone para azul, o UIBarButtonItemStylePlain en blanco como este

self.navigationItem.rightBarButtonItem.style = UIBarButtonItemStyleDone; 
6
UIButton *btnname=[UIButton buttonWithType:UIButtonTypeSystem]; 
[btnname setFrame:CGRectMake(0,0,110,35)]; 
[btnname setFont:[UIFont boldSystemFontOfSize:18]]; 
[btnname setTitle: @"Delete" forState: UIControlStateNormal]; 
[btnname setTitleColor:UIColorFromRGB(0xCC0707)  forState:UIControlStateNormal]; 
btnname.backgroundColor=UIColorFromRGB(0xE6E7E8); 
btnname.showsTouchWhenHighlighted = YES; 
[btnname addTarget:self 
      action:@selector(toggleEdit) 
forControlEvents:UIControlEventTouchDown]; 
UIBarButtonItem *barItem = [[UIBarButtonItem alloc] initWithCustomView:btnname]; 
self.navigationItem.rightBarButtonItem = barItem; 


-(void)toggleEdit{ 
    [self.tableView setEditing:!self.tableView.editing animated:YES]; 

    if (self.tableView.editing) 
     [btnname setTitle: @"Done" forState: UIControlStateNormal]; 
    else 
     [btnname setTitle: @"Delete" forState: UIControlStateNormal]; 
} 
+0

Esto es trabajo para mí .. – Saravanan

4

Aquí es una versión Swift utilicé:

func clickedEditButton(button: UINavigationItem) { 
    tableView.setEditing(!tableView.editing, animated: true) 

    if tableView.editing { 
     button.rightBarButtonItem?.title = "Done" 
    } else { 
     button.rightBarButtonItem?.title = "Edit" 
    } 
} 
0

comprobar que necesita para inicializar el título por primera vez. Por Storyboard,

enter image description here

después de eso,

@IBAction func editBtnPressed(_ sender: UIBarButtonItem) { 
     tableView.setEditing(!tableView.isEditing, animated: true) 

     if tableView.isEditing { 
      self.editButton.title = "Done" 
     } else { 
      self.editButton.title = "Edit" 
     } 
    }