Volver a cargar la vista de detalles cuando se elimina la celda de la tabla – Swift

Tengo un controller de vista dividida (master-detail). Lo estoy optimizando para el iPhone 6 Plus.

Este es el problema. Cuando selecciona una celda, realiza una segue de detalle de muestra y muestra la información de celdas en la vista detallada. Sin embargo, cuando elimina una celda, la vista detallada mantiene la información de celdas aunque la celda ya no existe.

He aquí un ejemplo:

func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) { if (editingStyle == UITableViewCellEditingStyle.Delete) { //code that deletes my cell/not needed for example tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Left) let splitController = self.splitViewController!.viewControllers self.detailViewController = splitController.last? as? detailedController if let detail = detailViewController { detail.title = "Select an item" //detail.title is a variable in the view controller //on the views "viewDidLoad" it sets a label.text as title. } } } 

Quiero realizar la acción: detail.title = "Seleccionar un elemento", para que la vista ya no muestre la celda eliminada. Intenté hacer un nuevo segue a través del código. Sin suerte.

¿Ideas?

Haz lo siguiente:

  1. Asegúrese de que su segue que establece el controller de vista de detalle tenga un identificador. En el proyecto de Detalle maestro de muestra, el identificador es "showDetail" . Puede encontrar el identificador seleccionando el segue en la Vista de esquema de documento del proyecto y luego buscando en el campo de Identificador en el Inspector de attributes para la segue.

  2. Llame a este segue mediante progtwigción cuando elimina una fila:

     override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) { if editingStyle == .Delete { // Call showDetail when in a splitViewController and 2 view controllers // are present if self.splitViewController?.viewControllers.count == 2 { self.performSegueWithIdentifier("showDetail", sender: self) } ... 
  3. En prepareForSegue asegúrese de verificar la fila seleccionada. Cuando llame a la segue desde el código de eliminación de celda, no se seleccionará ninguna fila y indexPathForSelectedRow() devolverá nil :

     override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { if segue.identifier == "showDetail" { if let indexPath = self.tableView.indexPathForSelectedRow() { // set up destination view controller in the normal way ... } else { // No row was selected which means either this is the initial setup // or we came here from the row delete code let splitController = self.splitViewController!.viewControllers self.detailViewController = splitController.last? as? detailedController if let detail = detailViewController { detail.title = "Select an item" ... } } } 

Nota: si su controller de vista de detalles tiene un estado pnetworkingeterminado para cuando detail.title no está configurado, y este estado pnetworkingeterminado es el que desea que su controller de vista de destino parezca si no se ha seleccionado ninguna fila, entonces ni siquiera necesita else en prepareForSegue . Este es el caso de la aplicación Master-Detail iOS de muestra. Solo es necesario llamar a segue programáticamente desde el código de edición, y todo simplemente funciona.