2011-10-29 12 views
25

Estoy creando una aplicación en ios5 usando storyboards. Tengo un TableViewcontroller incrustado en un controlador de navegación y cuando hace clic en las celdas del TableViewController, algunos detalles sobre ese tema de la celda se deben pasar a una vista detallada. Uso un plist para poblar la vista de tabla y la vista de detalle. He hecho esto bien sin usar el guión gráfico, pero quiero aprender a usar el guión gráfico. Tengo un seguimiento de mi vista de detalles desde el controlador de tabla.Cómo pasar datos en el storyboard de seque ios5 uitable para ver los detalles

Mi código para el Seque es:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([segue.identifier isEqualToString:@"DetailViewControllerSeque"]) 
    { DetailViewController *detailViewController = [segue destinationViewController]; 
     NSString *path = [[NSBundle mainBundle] bundlePath]; 
     NSString *finalPath = [path stringByAppendingPathComponent:@"questList.plist"]; 
     NSArray *tempArray = [finalPath valueForKey:@"description"]; 
     NSString *descriptionString = [tempArray valueForKey:@"description"]; 
     detailViewController.detailDescriptionText.text = descriptionString;  
    } 
} 

Gracias por cualquier ayuda.

+4

¿Cuál es tu pregunta? –

Respuesta

0

Tengo el mismo problema y aún no lo he resuelto con guiones gráficos. Sin embargo, creo que la transición debe comenzar en la celda, no en todo el controlador de tabla. si usa celdas de prototipo, esto podría funcionar, pero no sé sobre los tipos de celdas creados por código. agradecería cualquier ayuda sobre este tema, también.

Editar: El tutorial en http://kurrytran.blogspot.com/2011/10/ios-5-storyboard-and.html sugiere que no existe una solución segue y todavía tiene que hacer la transición a la vista de detalle en el código. No sé qué tan correcto es esto, pero lo haré de esa manera hasta que alguien me muestre la solución de storyboard/segue pura;).

12

Tuve el mismo problema, seguí partes del tutorial de Ray Wenderlich y descubrí que debes seleccionar la celda de la tabla y Ctrl-Drag para tu controlador de visualización. Luego llame al performSegueWithIdentifier en didSelectRowAtINdexPath.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    [self performSegueWithIdentifier:@"mySegueId" sender:self]; 
} 

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
     NSLog(@"prepareForSegue: %@", segue.identifier );  
     if ([segue.identifier isEqualToString:@"mySegueId"]) 
     { 
      DetailController *detailController = segue.destinationViewController; 
      detailController.delegate = (id)self; 
      detailController.selected = selectedRow; 
     } 
} 
+0

gracias, esto es exactamente lo que quería! Aquí hay un error: detailControllerController, no me permite editar o lo arreglaré yo mismo. –

+0

Gracias amigo. – SampathKumar

+0

ambas respuestas me ayudaron, pero me sorprendió que también necesitara esta. Pensé que Apple habría implementado de esa manera que sería suficiente conectar las celdas con la siguiente escena sin tener que decir qué segue realizar ... de todos modos, funciona. – Heckscheibe

67

que estaba teniendo el mismo problema (por la falta de experiencia con iOS5).

Resulta que es una aplicación de ejemplo con el iOS5 SDK que tiene una vista de tabla que usa los intervalos cuando se toca una celda de tabla: "Simple Drill Down".

https://web.archive.org/web/20130513140140/http://developer.apple.com:80/library/ios/#samplecode/SimpleDrillDown/Introduction/Intro.html

Usted establece el segue en la celda de la tabla y darle un nombre en el archivo de guión gráfico.

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

    /* 
    When a row is selected, the segue creates the detail view controller as the destination. 
    Set the detail view controller's detail item to the item associated with the selected row. 
    */ 
    if ([[segue identifier] isEqualToString:@"ShowSelectedPlay"]) { 

     NSIndexPath *selectedRowIndex = [self.tableView indexPathForSelectedRow]; 
     DetailViewController *detailViewController = [segue destinationViewController]; 
     detailViewController.play = [dataController objectInListAtIndex:selectedRowIndex.row]; 
    } 
} 
+0

¡gracias por esta brillante respuesta! (+1) – filou

+0

Muchas gracias.Estuve atascado con esto por varias horas. ¡Gracias! – Patrick

+3

Esta respuesta debe aceptarse como correcta. – dbarros

1

No será necesario que llame: [self performSegueWithIdentifier:@"mySegueId" sender:self];

podría utilizar NSIndexPath *selectedRowIndex = [self.tableView indexPathForSelectedRow]; para obtener su información seleccionada, en su función de - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{...}.

0

Prueba esta manera

Nombre Tu segue (a partir de células tableview para ver detalle) .A continuación,

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


    if([segue.identifier isEqualToString:@"yourSegueName"]){ 

     DetailViewController * detailViewController =segue.destinationViewController; 
     detailViewController =[self.yourTableViewDataArray objectAtIndex:[self.yourTableView indexPathForSelectedRow].row]; 

    } 

} 

No se olvide para importar su SecondViewController/DetailViewController

Cuestiones relacionadas