当我单击特定的选项卡(而不是切换到该选项卡)时,我正在使用以下类尝试使警报弹出。第一次单击该选项卡时,它会变为空白视图,并且不显示警报。
第二次单击它(及以后),它按预期运行。
是否有一种方法可以使警报在我第一次单击该标签时触发?
该课程的代码如下:
class TabOverlayViewController: UIViewController, UITabBarControllerDelegate {
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.tabBarController?.delegate = self
}
override func viewDidLoad() {
super.viewDidLoad()
}
func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
if viewController == tabBarController.viewControllers?[1] {
let alert = UIAlertController(title: "Add", message: "", preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "Album", style: .default) { action in
})
self.present(alert, animated: true, completion: {
})
return false
} else {
return true
}
}
}
答案 0 :(得分:0)
发生这种情况是因为仅在UITabBarViewControllerDelegate
方法中设置了viewWillAppear
。因此,第一次没有代表的呼叫时,仅在随后的点击中出现视图,设置代表并涉及func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool
方法。
UPD:
顺便说一句,您确定此特定控制器应该是UITabBarController
的委托吗?具体控制器决定哪个选项卡可以打开,哪个不能打开是否正确?在一个简单的应用程序中,我将分配给委托标签栏控制器本身:
final class TabBarVC: UITabBarController {
override func viewDidLoad() {
super.viewDidLoad()
delegate = self
}
}
extension TabBarVC: UITabBarControllerDelegate {
func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
// do your logic here
}
}
当然,您应该指定当前的选项卡栏控制器的类型为TabBarVC
。