ios - for - segue swift 4
IOS StoryBoard multiple Segue''s de un TableCell (4)
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 del controlador de vista, que determina qué segue se debe realizar.
Como decía la respuesta anterior, la clave es crear segue uniendo dos controladores de vista.
Hola, tengo un guión gráfico y puedo mostrar una vista detallada al hacer clic en una celda de la tabla. Quiero agregar funcionalidad adicional para que, dependiendo de en qué celda haga clic, muestre un controlador de vista diferente. Intenté arrastrar dos segmentos desde 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 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");
}
}
Entonces manejaría el cambio en prepareForSegue
- (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 segmentos de una sola celda de tabla. También traté de arrastrar ambas segue del controlador a cada destino en lugar de una de la celda y una del controlador, pero no tuvo suerte?
En veloz 3.1, con un control de segmento 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)
}
No intente conectar los Segues a una tablavista en este caso. Conéctelos al Controlador de Vista en sí.
No intente crear múltiples segues desde un TableCell a otros controladores de vista, quiere presionar + arrastrar desde el ícono del controlador de vista debajo del controlador de vista en la interfaz del guión gráfico a los controladores de vista a los que desea seguar. Luego, le permitirá configurar múltiples segues.
y luego para que realmente funcionen los segmentos, debe agregar identificadores a los propios segmentos, lo que puede hacer haciendo clic en ellos y luego dándole un nombre en el inspector de propiedades:
luego, para el ejemplo de TableCells, en su UITableViewDelegate, en
-tableView:didSelectRowAtIndexPath:
puedes usar
- (void)performSegueWithIdentifier:(NSString *)identifier sender:(id)sender
para iniciar manualmente una transición en función de su propia lógica de qué segue se debe elegir.