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

Popular posts from this blog

node.js - Node js - Trying to send POST request, but it is not loading javascript content -

javascript - Replicate keyboard event with html button -

javascript - Web audio api 5.1 surround example not working in firefox -