Existe-t-il un moyen d'obtenir le nom de classe du parent VC dans le présent (enfant) UIViewController
? Mon 'enfant' VC (Push) a deux 'parent' UIViewController
s, donc je voudrais savoir lequel est le parent actuel?
Voici une approche:
if let parentVC = self.parentViewController {
if let parentVC = parentVC as? someViewController {
// parentVC is someViewController
} else if let parentVC = parentVC as? anotherViewController {
// parentVC is anotherViewController
}
}
Tout d'abord, attribuez et éventuellement déballer self.parentViewController
.
Deuxièmement, utilisez la conversion facultative as?
, et affectez le contrôleur de vue à parentVC
si cela fonctionne.
Cela dit, il s'agit d'une odeur de code - les contrôleurs de vue enfants ne devraient généralement pas savoir qui sont leurs contrôleurs de vue parents. Quel que soit le problème que vous résolvez, vous devriez probablement le résoudre avec dites, ne demandez pas et la délégation à la place.
MIS À JOUR À Swift 5
Dans votre contrôleur de vue enfant, vous pouvez essayer quelque chose comme:
guard let parent = self.presentingViewController else{
// ...some code
return
}
//presented by parent view controller 1
if parent.isKind(of: Parent1.self){
// do something
}else{
//presented by parent view controller 2
}
Je vous recommande de placer cette logique dans votre méthode viewWillAppear
car lorsque viewDidLoad
est appelé, il n'y a aucune garantie que la hiérarchie du contrôleur de vue est chargée dans l'arborescence de navigation et comme conséquence de cela, le presentingViewController
la propriété de votre contrôleur de vue enfant peut être nil
Ajoutez d'abord l'extension dans le contrôleur de vue
extension UIView {
var parentViewController: UIViewController? {
var parentResponder: UIResponder? = self
while parentResponder != nil {
parentResponder = parentResponder!.next
if let viewController = parentResponder as? UIViewController {
return viewController
}
}
return nil
}
}
Maintenant, utilisez-le comme ça
let vc = self.parentViewController
ou
if let parentVC = self.parentViewController {
if let parentVC = parentVC as? someViewController {
// parentVC is someViewController
} else if let parentVC = parentVC as? anotherViewController {
// parentVC is anotherViewController
}
}
Utilisez simplement view.parentViewController
et éventuellement sa propriété title
.
essayez de choisir l'enfant dans le tableau des enfants comme suit
if let parentVC = self.parent {
if let parentVC = parentVC.children[0] as? someViewController {}}
Mis à jour à Swift 4
Swift 4:
if let parentVC = self.parent {
if parentVC is someViewControllerr {
// parentVC is someViewController
} else if parentVC is anotherViewController {
// parentVC is anotherViewController
}
}
Swift 3:
if let parentVC = self.parentViewController {
if let parentVC = parentVC as? someViewController {
// parentVC is someViewController
} else if let parentVC = parentVC as? anotherViewController {
// parentVC is anotherViewController
}
}