Search code examples
iossegueuistoryboardsegue

PageMenu pod presents Modal segue instead of Push segue


This question relates to:

I understand this question might be very similar to others. But I have been unable to use some of the answers to solve my issue.

Here is how my storyboard looks:

enter image description here

The viewController has a segmentControl that controls two viewControllers. I now want to segue to the DetailViewController, but it is appearing as modal segue which hides the tabBar and navigationBar.

I have tried deleting and recreating the segue as the some off the answers have suggested but it doesn't solve anything. Is there anything someone could suggest me or direct me to?

Edit:

After testing out the demo that the pod provides I was able to outline the issue I am struggling with. I have implemented the same methods in which it is practically identical. The only difference is that my method for this PageMenu does not use nib files like the demo has done.

In my tableView delegate I am trying to pass a recipe data to the DetailView. This is how my prepareForSegue and didSelect looks:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    performSegue(withIdentifier: "detail", sender: recipe)

}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "detail" {
        let vc = segue.destination as! DetailViewController
        let indexPath = tableView.indexPathForSelectedRow!
        vc.recipe = RecipeManager.shared.recipes[indexPath.row]

    }
}

Here is the demo's didSelect:

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let newVC : UIViewController = UIViewController()
    newVC.view.backgroundColor = UIColor.white
    newVC.title = "Favorites"

    parentNavigationController!.pushViewController(newVC, animated: true)
}

When comparing it with the demo I am struggling to understand where to implement the parentNavigationController!.pushViewController(newVC, animated: true) which I believe will solve my issue.


Solution

  • Assuming you implemented the parentNavigationController as they did in the demo, you are almost all set.

    Delete your existing Segue - you won't be using it.

    Give your DetailViewController a Storyboard ID - such as "DetailVC"

    Change your code to instantiate the DetailVC and push it onto the parent Nav Controller

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    
        if let vc = self.storyboard?.instantiateViewController(withIdentifier: "DetailVC") as? DetailViewController {
            vc.recipe = RecipeManager.shared.recipes[indexPath.row]
            parentNavigationController!.pushViewController(vc, animated: true)
        }
    
    }