Multiple segues du controller de vue de table

J'ai une petite application qui utilise plusieurs dispositions de section pour la vue initiale de la table. Une section affiche les tendances les plus récentes de Twitter et l'autre section affiche les histoires les plus récentes de Twitter. Lorsque je clique sur un élément de la list des tendances, je passe à un nouveau controller de vue de table qui affiche les tweets les plus récents sur cette tendance. Dans le controller de racine pour la section des histoires, je peux être en mesure d'afficher plus d'informations dans un controller de vue différent qui contient des images, des liens, et ainsi de suite. Le problème est que lorsque je sélectionne quelque chose dans la section des histoires, je suis poussé vers le controller de vue de table qui est mis en place pour la section des tendances. J'ai nommé chaque section et j'ai des classs personnalisées pour les deux vues que je veux faire passer et je fais ceci pour vérifier quelle section est appelée:

-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { if([[segue identifier] isEqualToSsortingng:@"viewTrendsSearch"]) { //get the controller that we are going to segue to SearchTrendResultsViewController *strvc = [segue destinationViewController]; //get the path of the row that we want from the table view NSIndexPath *path = [self.tableView indexPathForSelectedRow]; //here we get the trend object from the array we set up earlier to hold all trends Trends *results = [currentTrends objectAtIndex:[path row]]; //pass the object that was selected in the table view to the destination view [strvc setQuery: results]; } if([[segue identifier] isEqualToSsortingng:@"storyfullDetails"]) { StoriesViewController *svc = [segue destinationViewController]; NSIndexPath *path = [self.tableView indexPathForSelectedRow]; Stories *results = [currentStories objectAtIndex:[path row]]; [svc setStory:results]; } } 

Des suggestions sur la façon d'accéder aux différentes vues?

Il n'y a pas assez d'informations dans votre question pour être sûr, mais cela ressemble à un problème avec ce que j'appellerais les interceptions automatiques contre les saisies manuelles et les ressortingctions sur chacun.

Une séquence automatique est créée dans IB en faisant glisser depuis une cellule de tableau (prototype) ou un autre contrôle. La bonne chose à ce sujet est que, bien, automatique – tapant le contrôle effectue le segue, et tout ce que vous devez faire dans votre code est l'implémentation prepareForSegue:sender: sorte que le controller de vue de destination obtient les bonnes données. L'inconvénient est que tout contrôle donné (y compris les cellules de tableau prototype) ne peut avoir qu'une seule section sortante (sinon, le storyboard ne sait pas lequel effectuer automatiquement).

Une séquence manuelle est créée dans IB en faisant glisser depuis le controller de la vue source. L'avantage de ceci est qu'un controller de vue peut avoir plusieurs pages sortantes. D'un autre côté, ils ne sont pas associés à un contrôle tappable, vous devez donc implémenter une logique qui détermine laquelle exécuter quand (et appelle performSegueWithIdentifier: pour que cela se produise).

Compte tenu de ces compromis, il existe deux solutions possibles à votre problème:

  1. Utilisez plusieurs cellules de table prototypes – alors chacune peut avoir sa propre séquence automatique sortante. Vous devrez modifier le tableView:cellForRowAtIndexPath: du controller de tableView:cellForRowAtIndexPath: pour vérifier le numéro de section du path d'index et choisir l'identificateur approprié pour dequeueReusableCellWithIdentifier: mais cela peut rendre les choses plus pratiques ou efficaces si vos cellules de tendance et de scénario ont un contenu différent.

  2. Utilisez les segues manuels. Ensuite, votre controller de vue de table peut implémenter tableView:didSelectRowAtIndexPath: pour appeler performSegueWithIdentifier: avec l'identificateur approprié choisi en fonction de la section du path d'index.

De toute façon, votre prepareForSegue:sender: apparence est bonne.