ios interface-builder storyboard segue didselectrowatindexpath

ios - prepareForSegue llamado antes didSelectRowAtIndexPath solo cuando se agrega el tercer segue



interface-builder storyboard (2)

Debe usar didSelectRowAtIndexPath o didSelectRowAtIndexPath from cell, pero no ambos. Si desea que su didSelectRowAtIndexPath invoque segues, esos segmentos no deben ser desde la celda a la siguiente escena, sino desde el icono del controlador de vista en la barra sobre la escena:

Ahora puede seleccionar este nuevo segmento, ir al "inspector de atributos" ( opción + comando + 4 ) y proporcionar un identificador de guión gráfico al que pueda hacer referencia en su código cuando llame a performSegueWithIdentifier .

Tengo 3 segues a 3 vistas diferentes. 2 se implementan sin problemas, es cuando se crea el tercero cuando se producen los problemas.

Tengo el siguiente método didSelectRowAtIndexPath:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ NSLog(@" ---------- did select row"); if(indexPath.section == 0){ if(indexPath.row == [self.data count]-1){ //prior to adding this, everything works [self performSegueWithIdentifier:@"MoreComments" sender:self]; }else{ [self performSegueWithIdentifier:@"FriendView" sender:friend]; } }else if(indexPath.section == 1){ if(indexPath.row == [self.data2 count]-1){ [self performSegueWithIdentifier:@"MorePosts" sender:self]; }else{ [self performSegueWithIdentifier:@"FriendView" sender:friend]; } } }

Tengo el siguiente método prepareForSeque:

-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ if([segue.identifier isEqualToString:@"MorePosts"]){ MorePostsViewController *mfamvc = segue.destinationViewController; mfamvc.data = self.data; }else if([segue.identifier isEqualToString:@"FriendView"]){ FriendViewController *fvc = segue.destinationViewController; fvc.friend = friend; }else if([segue.identifier isEqualToString:@"MoreComments"]){ MoreCommentsViewController *mcvc = segue.destinationViewController; mcvc.data = self.data2; } }

Antes de arrastrar el control de mi celda a la última vista, puedo ver que mi programa tiene éxito en doselectrow y luego en prepare forseque. Esto hace que toda la navegación de la vista funcione perfecto.

Tan pronto como controlo el arrastre de mi celda al MoreCommentsViewController, comienzo a ver el error:

la animación de inserción anidada puede dar como resultado una barra de navegación dañada. Terminar una transición de navegación en un estado inesperado. El árbol de subvista de la barra de navegación podría corromperse.

Me doy cuenta de que ahora también se está llamando dos veces a prepareforseque, que se llama primero a prepare forsequeque, luego se seleccionó una nueva línea y luego se prepara nuevamente a la preparación.

¿Qué estoy haciendo mal para ir condicionalmente a estas diferentes vistas?


El motivo es que no puede arrastrar desde una celda de vista de tabla a varias vistas. Como @rdelmar mencionó, esto está mal. Debes arrastrar desde el destino a la vista de origen y luego manejar manualmente como lo hice anteriormente.

También se puede encontrar aquí: Segue condicional realizado en el toque en UITableViewCell