Segue à la vue actuelle UItableView

J'ai un nombre indéfini de niveaux (profondeur) dans ma vue de table, donc j'aimerais pouvoir créer une transition entre la vue et elle-même afin que je puisse l'appeler aussi longtime que j'ai des sous niveaux à découvrir. Comment puis je faire ça ?

J'ai pensé à utiliser directement [self.navigationView pushViewController] quand j'en ai besoin, mais je voudrais que le nouveau controller utilise la vue définie dans mon SB.

Merci,

EDIT: Pour l'instant la seule solution que j'ai trouvé est la duplication du VC, en définissant une segue entre VC1 et VC2 appelée 'showNext', et une séquence entre VC1 et VC2 appelée de la même manière. N'y a-t-il pas une meilleure solution?

Si vous utilisez des prototypes de cellules dynamics, vous pouvez évidemment effectuer un segment depuis la cellule de vue de table vers le controller sans aucun problème.

faire segue de la cellule au contrôleur

Quand vous faites votre segue, vous finissez avec:

segue circulaire

Mais imaginons pour une seconde qu'il y a une raison qui ne fonctionne pas pour vous, par exemple vous ne pouvez pas avoir de segue depuis la cellule (par exemple, vous devez invoquer segue de didSelectRowAtIndexPath , pas en sélectionnant la cellule). Dans ce cas, vous ne pouvez pas utiliser cette technique précédente.

Il y a deux options dans ce cas:

  1. Comme l'a souligné Chris , si seulement iOS 6 et supérieur, utilisez la technique ci-dessus, mais (a) assurez-vous que votre didSelectRowAtIndexPath utilise self pour l' sender , puis que shouldPerformSegueWithIdentifier n'autorise la segue que si l' sender == self (donc quand le sender est la cellule de vue de table, elle sera annulée);

  2. Peut-être même plus facile, ne définissez pas du tout un didSelectRowAtIndexPath et ayez votre didSelectRowAtIndexPath manuellement instantiateViewControllerWithIdentifier puis poussez / présentez ce controller de vue comme approprié; ou

  3. Vous pouvez utiliser ce qui suit, kludgy work-around: En bref, ajoutez un button à votre controller de vue (faites-le glisser vers le bas de la barre), où il ne s'affichera pas sur la vue, mais vous pouvez utiliser ses . Alors d'abord, faites glisser le button arrondi à la barre du controller au bas de la scène:

    faites glisser le bouton

    Maintenant, vous pouvez faire une segue à partir de ce button à votre controller de vue:

    faire segue à partir du bouton caché

    Et ainsi, vous vous refindez avec le segue autoréférentiel:

    dernier bouton segue

    Vous devez donner un identificateur à cette section, vous pouvez donc l'appeler par programmation via performSegueWithIdentifier , mais cela fonctionne. Pas la plus élégante des solutions, mais je pense que c'est mieux que d'avoir une scène supplémentaire sur votre storyboard.

Aucun d'entre eux n'est idéal, mais vous avez beaucoup d'options.

Ce process a fonctionné pour moi de faire exactement la même chose …

Configurez votre tableview dans le storyboard comme d'habitude. NE donnez PAS à votre cellule prototype un identifiant de cellule. Configurez votre segue comme vous l'avez fait ci-dessus, en faisant glisser de la cellule vers le controller.

Dans votre viewDidLoad save la class de cellule

 //register the cell identifier as we are not loading form a storybard [_aTableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"CellID"]; 

Dans votre cellForRowAtIndexPath configurez votre cellule

 static NSSsortingng *CellIdentifier = @"CellID"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; 

Vous pouvez maintenant utiliser didSelectRowAtIndexPath et appeler performSegueWithIdentifier. le prepareForSegue ne sera appelé qu'une seule fois.