Wayne Tang
Wayne Tang

Reputation: 509

Swift How to present view in root navigation after dismiss modal

I'm trying to make ViewController present after Modal dismiss

let storyboard = UIStoryboard(name: "Main", bundle: nil)
let chatRoomVC = storyboard.instantiateViewController(withIdentifier: "ChatRoomVCId") as! ChatRoomVC
chatRoomVC.hidesBottomBarWhenPushed = true
chatRoomVC.passValue = passValue

self.dismiss(animated: true, completion: {
    self.present(chatRoomVC, animated: true, completion: nil)
})

But it will return "whose view is not in the window hierarchy!" maybe it's present a view after the controller dismissed

The flow I suppose

Upvotes: 2

Views: 1389

Answers (3)

Infaz
Infaz

Reputation: 1143

When present from "Controller_A" to "Controller_B"-> present it like given below

--- View Controller A ---

self.navigationController?.present(Controller_B, animated: true, completion: nil)

When you want to dismiss "Controller_B" and present "Controller_C" using Navigation controller

--- View Controller B ---

let presenController : UINavigationController = self.presentingViewController as! UINavigationController

presentingController.dismiss(animated: true, completion: {
  presenController.pushViewController(Controller_C, animated: true)
})

Upvotes: 0

User511
User511

Reputation: 1486

You are using self. It means you are dismissing the current view controller. It should be the parent view controller who will present a new view controller.

Upvotes: 0

Tj3n
Tj3n

Reputation: 9923

Notice the self in self.present, what you are doing, is basically tell the vc that you are dismissing to present a new vc, thats wrong way to do, the correct way is tell it's PARENT vc to present a new vc, by using delegate/unwind to call the parent vc to present new vc

Upvotes: 2

Related Questions