Search code examples
swiftuiviewcontrollermodalviewcontrollerdismissviewcontroller

Close a modal view with a button in Swift?


Learning some view controller basics and am stuck on how to dismiss a modal with a button.

In my slimmed-down example, I have a two view setup with the initial view and the modal. The first view has a button that successfully pops up the modal. On the modal, there is a button that should dismiss itself.

According to other posts and documentation, I should be able to run simple code attached to the button like this:

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    @IBAction func CloseModal(_ sender: Any) {
        self.dismiss(animated: true, completion: nil)
    }

}

When I tap the "Close Modal" button nothing happens. What am I missing here? Am I putting this code in the wrong place? Currently, it's in the main ViewController.swift file.

enter image description here


Solution

  • You actually have two ViewController screens, but it looks like you have one ViewController class? And is the 2nd screen connected to a class?

    Must be in the class that belongs to the second screen of the closeModal method.

    //This is First ViewController, OpenModal Button is here
    class ViewController: UIViewController {
    
      override func viewDidLoad() {
         super.viewDidLoad()
      }
    
    }
    
    
    // The name of the class and the Viewcontroller in the storyboard have to be the same, and CloseModol Button and function need to be here 
    class SecondViewController: UIViewController {
    
      override func viewDidLoad() {
         super.viewDidLoad()
      }
    
      @IBAction func CloseModal(_ sender: Any) {
         self.dismiss(animated: true, completion: nil)
      } 
    
    }
    

    Don't forget to set the name of the ViewController in Storyboad; from FirstViewController to SecondViewController