Pregunta

Hola, tengo un guión gráfico y puedo mostrar una vista de detalle al hacer clic en una celda de mesa. Quiero agregar una funcionalidad adicional para que dependiendo de la celda que haga clic en Muestro un controlador de vista diferente. Intenté arrastrar dos segues de la misma celda, pero no lo permite.

Mi pensamiento era que tendría dos segue de la celda cada uno apuntando a una vista diferente y luego invocaría el segue deseado:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

    NSInteger row = indexPath.row;
    NSLog(@"Selected Item :-) %@",[NSString stringWithFormat:@"%@",[myData objectAtIndex:row]]);
    if(row %2 ==0){
        NSLog(@"Even");        
        [self performSegueWithIdentifier:@"ShowSecondIndex" sender:self];
    }else{
        [self performSegueWithIdentifier:@"ShowSelectedMovie" sender:self];
        NSLog(@"Odd");

    }

} 

Luego manejaría el segue en prepararforsegue

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{

    NSLog(@"Prepare For Segue ID:%@",[segue identifier]);

    if([[segue identifier] isEqualToString:@"ShowSelectedMovie"]){
        Tab2_ItemViewController *vc = [segue destinationViewController];
        NSInteger selectedIndex = [[self.tableView indexPathForSelectedRow] row];
        NSLog(@"Selected Index: %d",selectedIndex);
        [vc setSelectedItem: [NSString stringWithFormat:@"%@",[myData objectAtIndex:selectedIndex]]];
        NSLog(@"String Value: %@",[NSString stringWithFormat:@"%@",[myData objectAtIndex:selectedIndex]]);
        [vc setSelectedIndex:selectedIndex];


    }else if([[segue identifier] isEqualToString:@"ShowSecondIndex"]){

        NSLog(@"Viewing Second Index");
    }

}

Sin embargo, nunca muestra la segunda vista. ¿Es esto porque no es posible tener dos segues de una sola celda de mesa? También intenté arrastrar ambos Segue desde el controlador a cada destino en lugar de uno desde la celda y uno desde el controlador pero ¿Sill no tiene suerte?

¿Fue útil?

Solución

No intente conectar los Suges a un TableViewcell en este caso. Conéctalos al controlador de vista en sí.

Otros consejos

No intente crear múltiples segues desde un tablín a otros controladores de vista, desea arrastrar Ctrl+arrastrar desde el icono del controlador de vista debajo del controlador de vista en la interfaz del guión gráfico a los ViewControllers a los que desea que segue. Luego le permitirá configurar múltiples segues.

screenshot showing multiple segues

Y luego, para que los segues funcionen, debe agregar identificadores a los segues mismos, lo que puede hacer haciendo clic en ellos y luego dándole un nombre en el Inspector de propiedades:

giving segue an identifier

Luego, para el ejemplo de tablas, en su UableViewDelegate, en

-tableView:didSelectRowAtIndexPath: 

puedes usar

- (void)performSegueWithIdentifier:(NSString *)identifier sender:(id)sender 

Para comenzar manualmente un segue dependiendo de su propia lógica de lo que se debe elegir.

Aquí hay un código de muestra de mi proyecto de demostración:

-         (void)tableView:(UITableView *)tableView
  didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *segueName = nil;

    if (type == kCore) {
        segueName = @"segue1";
    } else if (type == kStdlib) {
        segueName = @"segue2";
    }

    [self performSegueWithIdentifier: segueName sender: self];
}

type es una propiedad de controlador de vista, que determina qué segue debe realizarse.

Como decía la respuesta anterior, la clave es crear Segue vinculando dos controladores de vista.

En Swift 3.1, con un segmento de control de dos estados

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
var segue: String!
if selectedSegment == 0 {
    segue = "segue1"
} else  {
    segue = "segue2"
}
self.performSegue(withIdentifier: segue, sender: self)

}

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top