iPhone Storyboard Edición de una vista de tabla

He estado intentando aprender la nueva característica de Storyboard en Xcode y me he topado con un problema al tratar de configurar un modo UITableView para editar.

Hasta ahora mi storyboard se ve así:

NavigationController -> UIViewController (subclass con propiedad tableview)

Agregué un elemento de navigation y un elemento del button de barra a la escena del controller de vista, así que veo un button de edición. No hizo nada automágicamente, así que intenté vincular su selector al método setEditing del delegado tableview. Esto lo puso en el modo de edición. Sin embargo, el button de edición no cambió a un button "Listo" y, por lo tanto, no hay forma de salir del modo de edición.

¿Debo crear otro elemento de navigation para el button Listo? ¿Cómo lo conecto para que aparezca en el momento correcto y funcione correctamente?

Acabo de comenzar a usar Storyboards, así que también quería usar Storyboard para agregar mi button Editar. Es molesto tomarse el time para aprender a usar una nueva herramienta, pero descubra que necesita un rollo de cinta adhesiva para arreglar los agujeros.

Puedes hacer que funcione, pero debes agregar un button personalizado. En el inspector de Atributos, asegúrese de que el Identificador es Personalizado y el título es Editar.

Luego agrega algo así en tu .m

- (IBAction)setEditMode:(UIBarButtonItem *)sender { if (self.editing) { sender.title = @"Edit"; [super setEditing:NO animated:YES]; } else { sender.title = @"Done"; [super setEditing:YES animated:YES]; } } 

Haga que su button Editar personalizado llame al método setEditMode.

Solo puede esperar que solucionen la implementación del button Editar en el editor Storyboard en el futuro.

Creo que también con Storyboard, la única forma (seguro, la más fácil) de implementar un button de edición / hecho , es usar el siguiente código:

 - (void)viewDidLoad { [super viewDidLoad]; ... //set the edit button self.navigationItem.leftBarButtonItem = self.editButtonItem; ... 

Esta es la solución que Apple implementa si selecciona una plantilla de "Aplicación Master-Detail" para su proyecto.

Probablemente Storyboard aún no es perfecto, y es de esperar que se mejore con Apple en los próximos lanzamientos …

Para resumir:

El button, devuelto por UIViewController.editButtonItem es un button especial de conmutación con comportamiento especial que llama - (void)setEditing:(BOOL)editing animated:(BOOL)animated si se presiona.

El button, devuelto por UINavigationController.editButtonItem es un simple button, simplemente labeldo con "Editar".

El Storyboard permite seleccionar el último.

Si está utilizando el controller de navigation para self.navigationItem.rightBarButtonItem = self.editButtonItem; controller de vista, simplemente configure self.navigationItem.rightBarButtonItem = self.editButtonItem; , que pondrá el button pnetworkingeterminado de edición a la derecha. Si la barra de navigation no está visible, llame a self.navigationController.navigationBarHidden = NO; . Se llamarían en el método viewDidLoad , o algo similar. Luego, para get tableView para responder a la llamada de edición, use el siguiente método:

 - (void)setEditing:(BOOL)editing animated:(BOOL)animated { [super setEditing:editing animated:animated]; [tableView setEditing:editing animated:animated]; } 

Eso debería hacer lo que quieres que haga. Si tiene algún problema, solo díganlo y podemos networkingucir los detalles

Para agregar a la respuesta de @Graham, es posible que también desee cambiar el estilo para que pueda tener el estilo del button "Listo" (el color azul). Algo como esto:

 - (IBAction)setEditMode:(UIBarButtonItem *)sender { if (self.editing) { sender.title = @"Edit"; sender.style = UIBarButtonItemStylePlain; [super setEditing:NO animated:YES]; } else { sender.title = @"Done"; sender.style = UIBarButtonItemStyleDone; [super setEditing:YES animated:YES]; } } 

uno puede usar el button de edición tonto, que no funciona, del editor de Storyboard y, a continuación, replacelo mediante progtwigción con UIViewController.editButtonItem .

en viewDidLoad:

  NSMutableArray *toolbarItems = [NSMutableArray arrayWithArray:self.toolbarItems]; [toolbarItems replaceObjectAtIndex:0 withObject:self.editButtonItem]; [self setToolbarItems:toolbarItems]; 

este código asume que uno ha agregado el button Editar tonto como el elemento más a la izquierda en la barra de herramientas en el Storyboard.

En caso de que tenga UIViewController y dentro de este, agregó un UITableVIew. Si desea agregar una edición UIBarButton para interactuar con UITableView, intente:

Añade esta línea …

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

y este método

 - (void)setEditing:(BOOL)editing animated:(BOOL)animated { [super setEditing:editing animated:animated]; [self.myListTableView setEditing:editing animated:animated]; if(self.myListTableView.editing) { NSLog(@"editMode on"); } else { NSLog(@"editMode off"); } } 

dónde

 @property (weak, nonatomic) IBOutlet UITableView *myListTableView;