2012-02-12 9 views
169

en mi aplicación tengo un botón que lleva a cabo una programación segue:Realizar Segue programación y pasar parámetros a la vista de destino

- (void)myButtonMethod 
{ 
    //execute segue programmatically 
    [self performSegueWithIdentifier: @"MySegue" sender: self]; 
} 

me gustaría saber si hay una manera de hacer referencia a la vista de destino y pasarle algunos parámetros

Sé que en el método prepareForSegue, puedo referirme a él con: myDestinationViewController *vc = [segue destinationViewController];, pero no sé cómo ejecutar esto segmen programmatically.

¿Tiene alguna idea?

Gracias, Yassa


ACTUALIZACIÓN:

Lo siento por esta pregunta !!! Simplemente descubrí que, incluso si el segue se invoca mediante programación, el método prepareForSegue se llama de todos modos, por lo que es posible pasar los parámetros de la misma manera habitual.

+44

Añadir la actualización como una respuesta y lo aceptan por lo que la gente sabe que esto ha sido contestada :) – danielbeard

+0

Añadir respuesta, comentario a la notificación. – DanSkeel

+11

Debe marcar la respuesta [a continuación] (http://stackoverflow.com/a/10783047/377384) como correcta, para que la gente sepa que se ha respondido. –

Respuesta

104

La respuesta es simplemente que no importa cómo se desencadena la segue.

En cualquier caso, se llama al método prepareForSegue:sender: y aquí es donde pasa los parámetros.

90

Pregunta anterior, pero aquí está el código sobre cómo hacer lo que está preguntando. En este caso, paso los datos de una celda seleccionada en una vista de tabla a otro controlador de vista.

en el archivo .h de la vista Trget:

@property(weak, nonatomic) NSObject* dataModel; 

en el archivo .m:

@synthesize dataModel; 

dataModel puede haber string, int, o como en este caso se trata de un modelo que contiene muchos elementos

- (void)someMethod { 
    [self performSegueWithIdentifier:@"loginMainSegue" sender:self]; 
} 

O. ..

- (void)someMethod { 
    UIViewController *myController = [self.storyboard instantiateViewControllerWithIdentifier:@"HomeController"]; 
    [self.navigationController pushViewController: myController animated:YES]; 
} 

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    if([segue.identifier isEqualToString:@"storyDetailsSegway"]) { 
     UITableViewCell *cell = (UITableViewCell *) sender; 
     NSIndexPath *indexPath = [self.tableView indexPathForCell:cell]; 
     NSDictionary *storiesDict =[topStories objectAtIndex:[indexPath row]]; 
     StoryModel *storyModel = [[StoryModel alloc] init]; 
     storyModel = storiesDict; 
     StoryDetails *controller = (StoryDetails *)segue.destinationViewController; 
     controller.dataModel= storyModel; 
    } 
} 
0

Entiendo el problema de realizar el cambio en un lugar y mantener el estado para enviar los parámetros en preparación para el cambio.

Descubrí una forma de hacerlo. He agregado una propiedad llamada userInfoDict a ViewControllers usando una categoría. y también he anulado la ejecución de segue con el identificador, de tal manera que si el remitente es uno mismo (significa el controlador mismo). Pasará este userInfoDict al siguiente ViewController.

Aquí, en lugar de pasar todo el UserInfoDict también puede pasar los parámetros específicos, como remitente y anular en consecuencia.

1 cosa que debe tener en cuenta. no te olvides de llamar al método súper en tu método de Realización.

0

En caso de que utilice una nueva versión rápida.

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
     if segue.identifier == "ChannelMoreSegue" { 

     } 
} 
Cuestiones relacionadas