prepareForSegue n'est pas appelé quand je clique sur un bouton, sans l'aide de performSegueWithIdentifier
Basé sur le Stanford iOS sûr, je suis à jouer avec vue modal contrôleurs. Dans la démo, ils ont un bouton qui lance une vue modal et lorsqu'il est cliqué, la fonction prepareForSegue est appelé. J'ai imité le code et la mise en œuvre de mon projet avec la seule différence est que mon démo est sur un iPhone storyboard et c'est sur l'iPad.
J'ai remarqué que, bien que mon modal-vue-contrôleur est à venir, il n'appelle pas prepareForSegue avant que. J'ai cherché sur le Stanford projet pour voir où ils peuvent enregistrer le segue comportement avant prepareForSegue est appelé, mais il n'y a pas de preuves. Quelqu'un peut jeter quelque lumière sur ce point. J'ai cherché un débordement de pile et de tous j'ai trouvé que les utilisateurs étaient manquants à l'appel de mise en œuvre de performSegueWithIdentifier. Toutefois, dans le Stanford démonstration qu'ils n'ont jamais le faire.
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier hasPrefix:@"Create Label"]) {
AskerViewController *asker = (AskerViewController *)segue.destinationViewController;
asker.question = @"What do you want your label to say?";
asker.answer = @"Label Text";
asker.delegate = self;
}
}
Voici un exemple de table de montage séquentiel:
Voici un exemple de mon storyboard:
Dans le débogueur quand je m'arrête au Stanford le code de Démonstration de la pile d'appel montre que le storyboard est l'exécution d'une séquence d'action, que dois-je configurer mon storyboard pour obtenir le même résultat?
- Comment savez-vous
prepareForSegue:
n'est pas appelée? Je parie qu'il est appelé. La seule façon d'en être sûr est de mettre un point d'arrêt sur la première déclaration en elle. Avez-vous fait? - Oui j'ai, c'est pourquoi je me suis posé la question. Dans ma démo, mon prepreForSegue n'est pas appelé, mais dans le Stanford démonstration qu'il est.
Vous devez vous connecter pour publier un commentaire.
Bien, il s'avère que mon point de vue, contrôleur de bouton appelle la modale de vue n'ont pas le droit de classe où prepareForSegue est mis en œuvre. C'était le défaut UIViewController au lieu de ma classe personnalisée.
La façon dont j'ai pensé qu'il était en mettant un point d'arrêt dans le viewDidLoad et même que c'était pas la rupture et donc je pense que dans la table de montage séquentiel je n'ai pas le droit de la classe associée avec le point de vue où le bouton est mis en œuvre.
Pour les autres avec ce problème, si vous êtes maintenant en utilisant Swift 3 ayant la fonction suivante ne sera pas jeter les erreurs, comme c'est la syntaxe correcte, mais il ne fonctionnera pas parce que c'est la Swift 2 fonction:
Vous devez mettre à jour Swift 3 "préparer" fonction pour que cela fonctionne pour les enchaîne:
Lors de l'accrochage d'un système automatique de transition pour une vue de la table, il n'y a, en plus de Amro de réponse (pas d'affecter votre sous-classe correspondante), deux autres cas où
prepareForSegue
pourrait ne pas être appelé. Vous assurer que vous avez:accroché jusqu'à la séquence de la vue de table prototype de cellule, pas la table view controller.
utilisé une séquence de sous la "Sélection Segue" groupe dans la séquence de connexion pop-up menu, pas un sous "Accessoire de l'Action".
[Cliquez sur l'image pour l'agrandir]
Si ses un Modal ou Pousser des Enchaînements de code ci-dessous sera toujours
Dans mon cas, il ocured parce que mon contrôleur de l'extension d'un autre contrôleur (Eureka Forme View Controller = FormViewController) sorcière a mis en œuvre le performSegue fonction comme ceci:
Ma fonction a été mis en œuvre comme ceci:
Pour résoudre ce problème, j'ai juste ajouté remplacer avant:
Voila!
J'ai eu un problème similaire avec
UICollectionViewCell
comme la source de segue.Il semble que, pour le storyboard de la séquence de travail (sans
performSegueWithIdentifier
), il est nécessaire que vous avez une sous-classe personnalisée deUICollectionViewCell
, et l'utiliser comme unClass
pour laCollectionViewCell
sur le story-board.Dans mon cas, je n'ai pas le module sous le nom de la classe dans le storyboard de la vue-contrôleur qui contient la séquence. Il a été mis à zéro et une fois que j'ai cliqué dans le champ du module sur le bon de projet /module et résolu le problème.
J'ai eu un problème similaire.
Le processus de la pensée a été:
Dans mon cas, j'ai une classe de base pour plusieurs contrôleurs de vue dans mon projet. Que de la classe de base a une mise en œuvre de
prepareForSegue()
qui n'était pas appelé dans tous les cas. Le problème est que, dans un de mon point de vue, les contrôleurs qui hérite de la classe de base et remplace sonprepareForSegue()
mise en œuvre, j'ai oublié d'appelersuper.prepareForSegue()
.Tout d'abord, vous devez sélectionner sur votre bouton + ctrl faites glisser l'élément de vous-vue-contrôleur choisissez sélection des enchaînements .Plus tard, vous avez au nom des enchaînements en identifiant correctement.
Ne vous connectez pas à un point de vue contrôleur à d'autres-vue-contrôleur.
importation UIKit.le cadre de cette
Ensuite, cette méthode sera appelée.