为什么我的UIAlertController直到第二次按下它的选项卡时才出现?

时间:2019-09-21 19:25:49

标签: ios swift uitabbarcontroller

当我单击特定的选项卡(而不是切换到该选项卡)时,我正在使用以下类尝试使警报弹出。第一次单击该选项卡时,它会变为空白视图,并且不显示警报。

第二次单击它(及以后),它按预期运行。

是否有一种方法可以使警报在我第一次单击该标签时触发?

该课程的代码如下:

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
        }
    }
}

1 个答案:

答案 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