Search code examples
iosswifteventsuitabbarcontrollerpause

How to pause/resume/cancel an event in iOS


I have an UITabBarController and sometimes in didSelectItem delegate I need to pause the event and present a popup. If user confirmed the event resumes and if not, event will be canceled. Here's my code:

class YC_TabBarController: UITabBarController {

    var prevIndex: Int!
    var exitAction: (()->Bool)?

    override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
        self.prevIndex = self.selectedIndex

        if self.prevIndex == 2 {

            guard self.exitAction != nil else {return}
            //pause
            let isExitAccepted: Bool = self.exitAction!()
            //if true -> resume
            //if false -> prevent from switching tab

        }

    }
}

How can I do that? Please Help


Solution

  • You should confirm to UITabBarControllerDelegate in first view controller and return false if the desired view controller is selected in shouldSelect viewController. Then you should show your popup view. In popup view ok/confirm button you can change selected view controller of the self.tabBarController

    class ViewController: UIViewController,UITabBarControllerDelegate {
    
        override func viewDidLoad() {
            super.viewDidLoad()
            self.tabBarController?.delegate = self
        }
    
        func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
            if viewController is SecondViewController {
                //show alert
                return false
            } else {
                return true
            }
        }
        func popUpOkAction(_ sender:UIButton) {
            if let secVC = self.tabBarController?.viewControllers?.first(where: { $0 is SecondViewController }) {
                self.tabBarController?.selectedViewController = secVC
            }
        }
    }
    

    If you want to perform this from multiple view controllers rather than firstViewController you can confirm to UITabBarControllerDelegate in YC_TabBarController itself.