ios – Call a function only once in UIViewController when a UIButton is clicked


If you put returnToView into your viewDidLoad it will not be executed because at the time viewDidLoad gets called, the view controller itself has not fully setup yet and it’s not visible on the window hierarchy. So you cannot use present. You may think to put it in viewWillAppear or viewDidAppear. However, it has a drawback: whenever you back from another present or back from navigationController.pushViewController, it will get called again.

So, I think this will achieve your goal. It works on a single instance of ViewController.

class ViewController: UIViewController {
    private var isExecuteSaveFunc = false
    
    @objc func returnToView(_ sender: UIButton) {
        let vsdd = SavedCanvasViewController()

        if !isExecuteSaveFunc {
            savedFunc()
            isExecuteSaveFunc = true
        }
     
        vsdd.modalPresentationStyle = .fullScreen
        vsdd.modalTransitionStyle = .coverVertical
        present(vsdd, animated: true)
    } 
}

In case you want savedFunc to execute once during the lifetime of the app, I think UserDefaults will fit.

Latest articles

spot_imgspot_img

Related articles

Leave a reply

Please enter your comment!
Please enter your name here

spot_imgspot_img