Personnalisé Segue dans Swift
@objc(SEPushNoAnimationSegue)
class SEPushNoAnimationSegue: UIStoryboardSegue {
override func perform () {
self.sourceViewController.navigationController.pushViewController(self.destinationViewController, animated:false)
}
}
Dans le code ci-dessus, j'ai 2 questions:
1). il a une erreur de compilation:
'UINavigationController!" n'ont pas un membre nommé "pushViewController'
Mais dans cette catégorie, il n'en n'a un pushViewController méthode.
2). Je dois ajouter l'annotation: @objc(SEPushNoAnimationSegue),
sinon, dans le storyboard, il ne reconnaissent que l'aléatoire généré nom, comme, _tcxxxxSEPushNoAnimationSegue.
pourquoi ces 2 questions se produire ici?
OriginalL'auteur user2909913 | 2014-06-12
Vous devez vous connecter pour publier un commentaire.
Le numéro 1
UIStoryboardSegue a un irritant défaut: son sourceViewController et destinationViewController propriétés sont donnés comme
AnyObject!
(c'est le cas même en Objective-C (type Id)) et non pas commeUIViewController
, comme il se doit.Que même défaut crée des ravages dans votre parfait et simple code. Voici comment le réécrire afin de corriger les erreurs de compilation:
REMARQUE: Apple a corrigé cette chose dans iOS 9.
sourceViewController
etdestinationViewController
sont maintenant correctement déclaré queUIViewController
.Question #2
La Swift compilateur stocke ses symboles à l'aide de ses propres name mangling, et good ol' Objective-C ne le reconnaît pas dans Xcode. À l'aide d'un explicite
@obj()
résout le problème.explicite @objc() - excellente suggestion - qu'est ce qu'il a fait pour moi
la swift nom de la convention a pour but d'éviter les conflits avec les autres importations.
Il suffit de régler le module spécifique de l'Enchaîner à votre projet dans la table de montage séquentiel
Je ne peux pas croire que tout ajout de @objc(classname) en face de la déclaration de classe qui fait que cela fonctionne... facepalm
OriginalL'auteur Jean Le Moignan
Cela fonctionne très bien pour moi
OriginalL'auteur fabian
Encore Mieux:
OriginalL'auteur Mike Miller
Swift 3.0:
OriginalL'auteur jakedunc