iosswifttableviewback-buttonnavigationcontroller

How to hide pop up view on previous page when pressing back button on swift


I have this kind of flow page :

Setting Page --> Enter Password --> Go to Page X

So in setting page, in order to go to page X, I have to enter a password using pop up view. When I'm in page X and i want to go back to previous page, I go to enter password pop up view, instead of the setting page. How do I skip that page?

My pop up view code is something like this :

let btn = storyboard?.instantiateViewController(withIdentifier: "PopUpView") as! PopUpView
        addChild(btn)
        btn.view.frame = view.frame
        view.addSubview(btn.view)
        btn.didMove(toParent: self)

I'm fairly new here, any help will be appreciated.

Thankyou.

enter image description here


Solution

  • use the settings view controller's present function to open the popup.

    //In your settings view
    
    func openPopup() {
        let btn = storyboard?.instantiateViewController(withIdentifier: "PopUpView") as! PopUpView
        self.present(btn, animated: true, completion: nil)
    }
    

    When the user clicks ok, call dismiss on your popup view and use the closure to initiate the page opening to X

    //In your 'PopUpView' On the OK button action of your popup
    
    func didTouchOk() {
        self.dismiss(animated: true) { [weak self] in
            guard let self = self else { return }
                
            //Put your open page X code here
            let XView = storyboard?.instantiateViewController(withIdentifier: "XViewController") as! XView
            self.present(XView, animated: true, completion: nil)
        }
    }
    
    

    if you are using navigationController:

    Declare a protocol in your PopUpView

    protocol popupDelegate: class {
        func userDidTouchOkInPopup()
    }
    

    create a weak var in your PopUpView

    weak var delegate: popupDelegate? = nil
    

    In your settings viewcontroller:

    Assign delegate to popup before pushing

    func openPopup() {
        let btn = storyboard?.instantiateViewController(withIdentifier: 
        "PopUpView") as! PopUpView
        btn.delegate = self
        self.navigationController?.pushViewController(btn, animated: true)
    }
    

    Implement an extension for this protocol

    extension SettingsViewController:  popupDelegate {
    
        func userDidTouchOkInPopup() {
            self.navigationController?.popViewController(animated: true)
            let XView = storyboard?.instantiateViewController(withIdentifier: 
            "XViewController") as! XView
            self.navigationController?.pushViewController(XView, animated: true)
    
        }
    
    }
    

    Modify the Ok action in your PopUpView

    //In your 'PopUpView' On the OK button action of your popup
    
    func didTouchOk() {
        self.delegate?.userDidTouchOkInPopup()
    }