我有一个UITabBarController,有时在didSelectItem委托中,我需要暂停事件并弹出一个弹出窗口。如果用户确认事件已恢复,则不会,事件将被取消。这是我的代码:
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
}
}
}
我该怎么做?请帮忙
答案 0 :(得分:2)
您应该在第一个视图控制器中向UITabBarControllerDelegate
确认,并在return false
中选择所需的视图控制器shouldSelect viewController
。然后你应该显示你的弹出视图。在弹出视图确定/确认按钮中,您可以更改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
}
}
}
如果要从多个视图控制器执行此操作而不是 firstViewController你可以确认到
UITabBarControllerDelegate
YC_TabBarController
本身。