Comment vérifier si une vue contrôleur peut effectuer un segue
Cela peut être une question très simple, mais ne donnent aucun résultat lors de la recherche pour elle si elle est ici...
Je suis en train de travailler sur un moyen de vérifier si un certain point de vue contrôleur peut effectuer une transition avec l'identifiant XYZ avant l'appel de la performSegueWithIdentifier:
méthode.
Quelque chose le long des lignes de:
if ([self canPerformSegueWithIdentifier:@"SegueID"])
[self performSegueWithIdentifier:@"SegueID"];
Possible?
- Exactement la question que je suis à la recherche de la réponse à l'heure...
- Hey Dan, j'ai fini par utiliser
@try @catch @finally
. Il fonctionne très bien. - Je l'ai fait aussi, j'avais vraiment l'espoir il est en fait un moyen de vérifier cela. En règle générale, j'essaie d'éviter les situations où une exception PEUT être levée au cours normal d'exécution situations.
- Curieux de savoir pourquoi vous ne savez pas à l'avance si un viewController pourrait gérer un segue. Est-il un code de problème de conception, etc.
- Dans mon cas, je voudrais pour une configuration automatique. Si une chose est associé à un segue, je peux configurer son INTERFACE utilisateur pour montrer que (plus précisément, c'est
UITableViewCell
instances, et de vouloir configurer leurs accessoires). Il ya beaucoup d'autres façons d'atteindre le même objectif (j'utilise), mais à la façon que je peux penser de conduire à la répétition, qui je tiens à éviter.
Vous devez vous connecter pour publier un commentaire.
Comme indiqué dans la documentation:
Cela étant dit, lorsque vous déclenchez le
segue
, normalement, c'est parce qu'il est supposé que lesUIViewController
sera en mesure de répondre à l'aide d'unsegue's
identificateur. Je suis également d'accord avec Dan, F, vous devriez essayer d'éviter les situations où une exception peut être levée. La raison pour vous de ne pas être en mesure de faire quelque chose comme ceci:Je devine que:
respondsToSelector:
vérifie seulement si vous êtes capable de gérer ce message lors de l'exécution. Dans ce cas, vous pouvez, parce que la classeUIViewController
est en mesure de répondre àperformSegueWithIdentifier:sender:
. Pour vérifier si une méthode est capable de gérer un message avec certains paramètres, je suppose qu'il serait impossible, parce que, pour déterminer s'il est possible, il a fait exécuter, et quand faire leNSInvalidArgumentException
à la hausse.UIViewController
est associée. À partir de laUIViewController
la documentation, je n'étais pas capable de trouver quelque chose qui ressemble à çaQue pour l'instant, je devine votre meilleur pari, c'est de continuer avec la
@try
@catch
@finally
.Pour vérifier si la séquence a existé ou pas, j'ai simplement entouré l'appel avec un try-et-bloc catch. Consultez l'exemple de code ci-dessous:
Espère que cette aide.
performSegueWithIdentifier:sender:
message, et tous ses enfants-vue-contrôleur (parce que UIKit conserver la vue du contrôleur, mais n'obtient jamais la chance de le libérer en raison de l'exception).Ce post a été mis à jour pour Swift 4.
Ici est un plus correct moyen rapide de vérifier si un segue existe:
Vous pouvez remplacer l' -(BOOL)shouldPerformSegueWithIdentifier:expéditeur: méthode et de faire de votre logique.
Espère que cette aide.
Référence CanPerformSegue.swift
Swift version de Evgeny Mikhaylov de réponse, ce qui a fonctionné pour moi:
- Je réutiliser un contrôleur pour les deux points de vue. Cela me permet de réutiliser le code.
canRunSegueWithIdentifier
Il n'y a aucun moyen de vérifier cela en utilisant les fonctions standard, ce que vous pouvez faire est de la sous-classe
UIStoryboardSegue
et stocker les informations dans lasource
- vue-contrôleur (qui est transmis au constructeur). Dans interface builder, sélectionnez "Custom" comme la séquence de type de type de la classe nom de votre segue, votre constructeur sera appelé à chaque segue instancié et vous pouvez interroger les données stockées, si elle existe.Vous devez également remplacer les
perform
méthode à appeler[source presentModalViewController:destination animated:YES]
ou[source pushViewController:destination animated:YES]
en fonction de ce type de transition que vous voulez.