2012-01-03 1 views
0

Je suis confronté au problème suivant lors de la mise en œuvre de mon application. J'ai une application à onglets et en cliquant sur chaque onglet, je peux accéder à la vue correspondante: par exemple, en cliquant sur tab2 ouvre view2. Mais je peux accéder à View2 aussi en cliquant sur un bouton sur la View1 qui est faite comme suit:Différents comportements dans l'accès aux vues via des onglets ou des segments

... 
[buttonToView2 addTarget:self action:@selector(gotoView2) forControlEvents:UIControlEventTouchUpInside]; 
... 

où:

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

View2 a une table qui affiche les données d'un tableau avec des données de l'Internet (dans la méthode viewDidAppear). Ainsi, en sélectionnant l'onglet 2 ou en cliquant sur le bouton, vous devez amener l'utilisateur à la vue de destination2.

Cela fonctionne, mais a un comportement différent dans les deux cas:

  • Si je clique sur l'onglet, la table est déjà rempli avec les données alors que l'application récupère les informations de l'Internet
  • Si je clique le bouton et j'effectue le segue, la table est vide pendant que l'application récupère des informations sur internet

Pourquoi? Peut-être parce que le sélecteur invoqué par le bouton est exécuté sur un thread différent? Des idées s'il vous plaît?

Cordialement, Yassa

+0

Vérifiez que vous avez correctement implémenté '- (void) prepareForSegue: (UIStoryboardSegue *) sgue expéditeur: (id) sender' pour votre seque (voir le message utile ?: http://stackoverflow.com/questions/8680453/programatically -copy-array-to-new-view-in-storyboard) – petert

+0

Dans ce cas je n'ai pas implémenté le 'prepareForSegue' puisque je n'ai aucune information qui doit être passée à la vue de destination2 ... Je vais essayez d'expliquer mieux. J'ai: '@interface View2: UIViewController { NSArray * arrayView2; UIImage * profileImage; .... ' Si j'accède à cette vue via l'onglet pour la deuxième fois, toutes ces variables sont remplies. Si j'accède par programmation via Segue, ils sont nuls. – yassassin

Répondre

0

Chaque fois qu'un Segue est exécuté, il crée une nouvelle instance de la destinationViewController (dans ce cas view2). Cela signifie que vous avez 2 instances distinctes de view2.

+0

et est-il possible d'éviter cela d'une manière ou d'une autre? ou existe-t-il une solution de contournement pour cela? Merci pour votre réponse!!! – yassassin

+0

il n'y a aucun moyen d'éviter ce que font Segue. Mais pensez peut-être à repenser le flux de votre application. Par exemple, vous pouvez faire basculer le bouton vers le second onglet par programmation, au lieu d'exécuter le segue. – agilityvision

+1

voulez-vous dire quelque chose comme ceci: 'View2 * currentImageDetail = [self.storyboard instantiateViewControllerWithIdentifier: @" View2Identifier "]; [self.View1 addSubview: currentImageDetail.view]; ' ou existe-t-il de meilleurs moyens? Merci beaucoup!!! – yassassin

Questions connexes