Storyboard Segue del controller de vista a sí mismo

Estoy intentando hacer un mecanismo para desglosar una list de files / carpetas. La idea es mostrar el mismo controller de vista de list de files cada vez que el usuario selecciona una carpeta y mostrar un controller de vista de detalle de file si selecciona un file.

Hasta ahora, he creado una segue desde el controller de vista de list de files al controller de vista de detalle de file, y una segue desde la celda de vista de tabla de list de files al controller de vista de tabla de list de files:

introduzca la descripción de la imagen aquí

El problema con esto es que tan pronto como el usuario toca la celda, se ejecuta la segue. Me gustaría eliminar el segue de la celda de vista de tabla y hacer uno desde el controller de vista de list de files a sí mismo. De esa manera, podría activar el Segue correcto mediante progtwigción cuando el usuario tocó la celda.

Entonces, mi pregunta es: ¿Es posible crear una segue desde un controller de vista a sí mismo en Interface Builder?

Desarrollé un método para crear una segue utilizando un button fantasma. Creo que resolverá tu problema. Puedes leer sobre esto en mi respuesta aquí .

Si está utilizando un controller de navigation, debe empujar el ViewController a la stack de navigation. En este ejemplo, nombré mi ViewController "VDI" en mi configuration de ID de Storyboard.

 UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle: nil]; YourVC *dest = [storyboard instantiateViewControllerWithIdentifier:@"VDI"]; [self.navigationController pushViewController:dest animated:YES]; 

Si no desea que el NavigationController se siga agregando a su historial "Atrás", puede hacer estallar la stack antes de añadirla.

 UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle: nil]; YourVC *dest = [storyboard instantiateViewControllerWithIdentifier:@"VDI"]; UINavigationController *navController = self.navigationController; [navController popViewControllerAnimated:NO]; [navController pushViewController:dest animated:YES]; 

Usando Xcode 5 hay una solución mucho más simple.

  1. Haga clic en la celda de la tabla en el guión gráfico.
  2. Abra el Inspector de conexiones (icono de la flecha hacia la derecha en la esquina superior derecha)
  3. En "Segundos activados", verá "Selección"
  4. Arrastre del círculo al lado de "selección" a la celda en el guión gráfico

Eso es.

En lugar de realizar una segue en el mismo controller, puede instanciar un controller de vista (el mismo) desde el guión gráfico y luego presionar eso en el controller de navigation.

En iOS 6, hay una solución más limpia que usar un button fantasma. Aún puede definir la segue desde la celda de la tabla al controller de vista y mirar al emisor para cancelar la segue activada automáticamente:

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { //storyboards should use segues and override prepareForSegue instead //but here we need custom logic to determine which segue to use id item = [self.fetchedResultsController objectAtIndexPath:indexPath]; if (item meets condition) { [self performSegueWithIdentifier:@"segue1" sender:self]; } else { [self performSegueWithIdentifier:@"segue2" sender:self]; } } - (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender { //ignore segue from cell since we we are calling manually in didSelectRowAtIndexPath return (sender == self); } 

A continuación, le indicamos cómo puede impulsar otra instancia del controller de vista actual sin definir una segue o hardcoding su propio identificador:

 SameViewController *same = [self.storyboard instantiateViewControllerWithIdentifier: self.restrationIdentifier]; [self.navigationController pushViewController: same animated: YES]; 

Solo necesita configurar la ID de restauración para que sea la misma que la ID de Storyboard (hay una checkbox para eso en IB).

ID de restauración

El enfoque de Interface Builder: solo según una reference de storyboard que se refiere al controller de vista de presentación.

Espero que esto ayude.

Descubrí que puedes crear varias celdas prototipo.

Que puedes vincular cada celda (en el Storyboard) a una vista diferente.

Algo como esto:

 NSString *CellIdentifier = @"Cell"; if (Condition2 ){ CellIdentifier = @"Cell2"; } if (Condition3 ){ CellIdentifier = @"Cell3"; }