177 votes

Effectuer par programmation, Segue et passer des paramètres à la vue de destination

dans mon application j'ai un bouton qui exécute une séquence du programme:

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

Je voudrais savoir si il existe un moyen de faire référence à la vue de destination et de le transmettre certains paramètres.

Je sais que, en prepareForSegue méthode, je peux faire référence à:myDestinationViewController *vc = [segue destinationViewController];, mais je ne sais pas comment cela exécution de la séquence de la programmation.

Avez-vous des idées?

Merci, yassa


Mise à JOUR:

Je suis désolé pour cette question!!! J'ai simplement découvert que, même si la séquence est appelé par programme, l' prepareForSegue méthode est appelée de toute façon et il est donc possible de passer des paramètres de la même manière habituelle.

108voto

trapper Points 3714

La réponse est tout simplement qu’il ne fait aucune différence combien la segue est déclenchée.

La `` méthode est appelée en tout cas et c’est où vous passez vos paramètres dans l’ensemble.

91voto

user1723341 Points 569

Vieille question, mais voici le code sur la façon de faire ce que vous demandez. Dans ce cas, je suis de passage des données à partir d'une cellule sélectionnée dans une table en vue d'un autre point de vue contrôleur.

dans l' .h fichier de la trget vue:

@property(weak, nonatomic)  NSObject* dataModel;

dans l' .m fichier:

@synthesize dataModel;

dataModel peut string, int, ou comme dans ce cas, c'est un modèle qui contient de nombreux éléments

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

OU...

- (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;
    }
}

0voto

karthik1729 Points 1

Je comprends le problème de l'exécution de la séquence en un seul lieu et le maintien de l'état pour envoyer des paramètres à préparer pour enchaîner.

J'ai trouvé une façon de le faire. J'ai ajouté une propriété appelée userInfoDict à ViewControllers à l'aide d'une catégorie. et j'ai remplacer effectuer des enchaînements avec l'identificateur de trop, de telle manière que Si l'expéditeur est auto(signifie que le contrôleur lui-même). Il va passer cette userInfoDict à la prochaine ViewController.

Ici, au lieu de passer l'ensemble de la UserInfoDict vous pouvez également passer le spécifique params, que l'expéditeur et le remplacer en conséquence.

1 chose que vous devez garder à l'esprit. n'oubliez pas d'appeler la méthode super dans ur performSegue méthode.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X