Search code examples
iosswiftdelegatessegue

Coming back to UIViewController doesn't trigger segue


I have Controller B, which sends data back to Controller A using delegate pattern but for some reason my segue doesn't trigger.

Is something stopping my segue from being triggered? How would I resolve this?

Controller B - Present Modally

@IBAction func addButton(_ sender: Any) {
        delegate?.select(sID: selectedID)
        dismiss(animated: true, completion: nil)
    }

Controller A

func select(sID: String) {
        performSegue(withIdentifier: "editSegue", sender: self);
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "editSegue" {
            if let destinationVC = segue.destination as? NewController {
                destinationVC.selectedQueryID = selectedQueryID;
                print(“test”);
            }
        }
        if segue.identifier == "selectSegue" {
            if let destinationVC = segue.destination as? ControllerB {
                destinationVC.queryID = selectedQueryID;
                destinationVC.delegate = self;
            }
        }
}

Controller C - Present Modally (does not present itself)


Solution

  • In the B viewcontroller, trigger upon completion of the dismiss

    @IBAction func addButton(_ sender: Any) {
    
        dismiss(animated: true, completion: {
             delegate?.select(sID: selectedID)
       }
    }
    

    Also make sure that you are presenting B viewcontroller modally.