为什么我的 UIAlertController 直到我第二次按下它的标签时才出现?
Why does my UIAlertController not appear until the second time I press it's tab?
我正在使用以下 class 来尝试在我单击特定选项卡(而不是切换到该选项卡)时弹出警报。我第一次单击该选项卡时,它进入一个空视图并且不显示警报。
我第二次(及以后)点击它时,它按预期工作。
有没有办法在我第一次单击选项卡时触发警报?
class 的代码如下:
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
}
}
}
发生这种情况是因为您仅在 viewWillAppear
方法中设置了 UITabBarViewControllerDelegate
。所以第一次没有委托的调用时,视图出现,设置委托并仅在后续点击时涉及 func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool
方法。
更新:
顺便问一下,您确定这个特定的控制器应该是 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
。
我正在使用以下 class 来尝试在我单击特定选项卡(而不是切换到该选项卡)时弹出警报。我第一次单击该选项卡时,它进入一个空视图并且不显示警报。
我第二次(及以后)点击它时,它按预期工作。
有没有办法在我第一次单击选项卡时触发警报?
class 的代码如下:
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
}
}
}
发生这种情况是因为您仅在 viewWillAppear
方法中设置了 UITabBarViewControllerDelegate
。所以第一次没有委托的调用时,视图出现,设置委托并仅在后续点击时涉及 func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool
方法。
更新:
顺便问一下,您确定这个特定的控制器应该是 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
。