ios - Able to dismiss entire stack of view controllers except for the controller calling dismiss -
i start uitabbarcontroller
(vc1)
i present uiviewcontroller
(vc2) on top of , set variable named parentcontroller
self
:
let logincontroller = logincontroller() dispatchqueue.main.async { self.present(logincontroller, animated: false, completion: { // once presented, set parentcontroller = self logincontroller.parentcontroller = self }) }
i continue present third uiviewcontroller
(vc3) on top of vc2 when user taps "login email button":
let withemailcontroller = withemaillogincontroller() withemailcontroller.parentcontroller = self present(withemailcontroller, animated: true, completion: nil)
after signing email, present fourth uiviewcontroller
(vc4) user can pick profile picture
let profilepicturepickercontroller = profilepicturepickercontroller() profilepicturepickercontroller.parentcontroller = self present(profilepicturepickercontroller, animated: true, completion: nil)
after user has picked profile picture call code in vc4 in attempt dismiss vc2, vc3, , vc4 function in vc2:
parentcontroller?.parentcontroller?.handledismiss()
where handledismiss
in vc2 simply:
func handledismiss() { // progress maintabbarcontroller parentcontroller?.progresswithloggedinuser() // dismiss logincontroller self.dismiss(animated: true) { // things in here aren't relevant question } }
the problem: when function belonging vc2 named handledismiss
called vc2, works fine , vc2 dismissed (vc3 , vc4 not dismissed because have not been presented yet). however, when handledismiss
called vc4 above, vc3 , vc4 dismissed. vc2 remains. vc1,2,3,4 in same stack, understanding.
what have tried: putting present/ dismiss commands in dispatchqueue.main.async {code}
. calling parentcontroller?.parentcontroller?.dismiss(animated: true, completion: nil)
directly in vc4 has same error. calling handledismiss()
vc2 make sure works properly
where else have looked: dismiss more 1 view controller simultaneously, dismissing presented view controller. feel setting parentcontroller
variables same using presentingviewcontroller
okay turns out re-reading apple documentation idea
the answer: understanding calling dismiss
on uiviewcontroller
2 different things depending on whether controller has children (controllers presented on top of it). if call dismiss
on top view controller i.e. topcontroller.dismiss(animated: true){code}
dismiss top controller expected. if, however, call dismiss
on controller has children, dismiss children of controller, not controller itself. top child 1 animates.
if calling dismiss in stack, must call on parent of child want dismiss: parentcontroller.dismiss(animated: true){code}
implemented solution: function handledismiss()
has been moved vc1 , fixes everything.
Comments
Post a Comment