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
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
inYC_TabBarController
itself.