[Résolu] Dismiss popOver
Bonjour,
il s'agit d'un problème de dismiss d'un popOver.
J'ai besoin de dismiss le popOver quand j'ouvre la nav de gauche.
Une petite vidéo sera plus explicite.
ça fonctionne dans le premier cas et pas dans le second.
Dans le premier cas, je suis dans le controller qui est le root :
pagesNavigationController = UINavigationController(rootViewController: etape0ViewController)
puis ensuite, après le swipe de right to left, je rentre dans un pageView, et là ça marche pas
J'ouvre la nav à partir du container général :
func toggleNavPatients() {
let slideNavPasEncoreOuverte = (etatCourantSlideNav == .SlideNavFermee)
if slideNavPasEncoreOuverte {
if (patientsViewController == nil) {
patientsViewController = UIStoryboard.patientsViewController()
patientsViewController?.delegatePatients = self
} else {
}
self.view.insertSubview(patientsViewController!.view, atIndex: 0)
addChildViewController(patientsViewController!)
patientsViewController?.didMoveToParentViewController(self)
etatCourantSlideNav = .SlideNavOuverte
animateNavCenterPanelXPosition(targetPosition: CGRectGetWidth(pagesNavigationController.view.frame) - pageDecalage)
} else {
animateNavCenterPanelXPosition(targetPosition: 0) { finished in
self.etatCourantSlideNav = .SlideNavFermee
self.patientsViewController = nil
}
}
}
J'y parviens tout simplement en rajoutant cela dans "toggleNavPatients" :
self.dismissViewControllerAnimated(true, completion: nil)
J'y parviens également en rajoutant cela dans "toggleNavPatients" :
func toggleNavPatients()
dispatch_async(dispatch_get_main_queue(),{
self.dismissViewControllerAnimated(true, completion: nil)
})
....
}
Ensuite j'ai essayé ça pour l'écran suivant :
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {
self.dismissViewControllerAnimated(true, completion: nil)
dispatch_async(dispatch_get_main_queue()) {
self.dismissViewControllerAnimated(true, completion: nil)
}
}
ça marche pas.
func dispatch_to_main_queue(block: dispatch_block_t?) {
dispatch_async(dispatch_get_main_queue(), block!)
}
func dispatch_to_background_queue(block: dispatch_block_t?) {
let q = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
dispatch_async(q, block!)
}
Puis toujours dans"toggleNavPatients" :
dispatch_to_main_queue {
self.dismissViewControllerAnimated(true, completion: nil)
}
dispatch_to_background_queue {
self.dismissViewControllerAnimated(true, completion: nil)
}
C'est la première fois que je joue avec ces trucs. C'est peut-être pas la bonne piste.
Quelqu'un aurait une idée ?
Merci.
Réponses
Désolé, j'ai résolu mon problème autrement.
C'était tout simple :
Comme ça je ne touche as à ce truc de dispatch, car de toutes les façons, je n'y comprend rien.
Je ne sais même pas ce que c'est que les threads... Enfin, pas trop...
Merci quand même
Tout ce qui est IHM doit être fait sur le thread principal en Cocoa.
C'est pour cela qu'on voit souvent dispatch_async(dispatch_get_main_queue(),...) qui dit de faire le traitement sur le thread principal. C'est à appeler quand tu travailles sur un autre thread (par ex. bloc de réponse à une requête réseau).
Oui, j'ai déjà vu des trucs là -dessus, en fait.
Par contre, ça, ça me clariefie bien les choses.
Merci.
Mais apparemment, pour l'instant, je n'en ai pas besoin. Enfin, j'espère.
Dans mon projet, on se balade d'écran en écran, puis on manipule des poignées et des lignes, ou on rempli des champs, puis on stock tout ça dans coredata.
Tout ça pour chaque cell d'un tableView (en slideNav).
Si tu veux voir une démo, c'est ici.