Search code examples
iosswiftxcode7uistoryboardsegue

Perform some code before a segue after I push a button in swift


I have a button that goes to another view. I want to perform some code before the segue moves. The problem I am facing is the segue goes to the other page before the code has a chance to finish. So the values that are in the User default don't get changed before the view gets changed. My question is how can I get the code to run and after its done get the segue to fire? Here is what I have so far:

 @IBAction func onLogoutClick(sender: AnyObject) {
    //clear all url chache 
    NSURLCache.sharedURLCache().removeAllCachedResponses()
    //null out everything for logout
    email = ""
    password = ""
    self.loginInformation.setObject(self.email, forKey: "email")
    self.loginInformation.setObject(self.password, forKey: "password")
    self.loginInformation.synchronize()
    //self.view = LoginView
}

Solution

  • You have a couple of options;

    The first is to remove the action from the button in IB and then create a segue between the UIViewController object and your next scene;

    @IBAction func onLogoutClick(sender: AnyObject) {
        //clear all url chache 
        NSURLCache.sharedURLCache().removeAllCachedResponses()
        //null out everything for logout
        email = ""
        password = ""
        self.loginInformation.setObject(self.email, forKey: "email")
        self.loginInformation.setObject(self.password, forKey: "password")
        self.loginInformation.synchronize()
    
        self.performSegueWithIdentifier("logoutSegue",sender: self)
    }
    

    or you can get rid of the @IBAction method and implement prepareForSegueWithIdentifier

    override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) {
       if segue.identifier == "logoutSegue"  {
            //clear all url chache 
            NSURLCache.sharedURLCache().removeAllCachedResponses()
            //null out everything for logout
            email = ""
            password = ""
            self.loginInformation.setObject(self.email, forKey: "email")
            self.loginInformation.setObject(self.password, forKey: "password")
            self.loginInformation.synchronize()
       }
    }