如何调用带有导航的Tabbar应用程序中的viewWillDisappear方法

时间:2011-08-29 07:26:04

标签: iphone objective-c uinavigationcontroller uitabbarcontroller uitabbar

我在我的应用程序中创建了5个选项卡。在 Tab1 中,我有UITableView。在didSelectRowAtIndexPath我正在导航到另一个UIView,我正在显示我的所有5个标签。我也在那个导航视图中播放歌曲。

现在当我点击导航中的返回按钮并再次转到原始视图时,我可以拨打viewWillDisappear(正常情况和正常情况)。

但是当我直接点击另一个标签时,导航的视图中不会调用viewWillDisappear。为什么会发生这种情况?

我刚才想到,当我直接点击另一个标签时, Tab1 中的视图会调用 viewWillDisappear 。但导航视图不会调用该方法。

那么可能的解决方案是什么?请给一些提示......

5 个答案:

答案 0 :(得分:9)

我通过调用

让viewWillDisappear工作
self.definesPresentationContext = true

在viewDidLoad()

否则,viewWillDisappear没有被调用。这就是我的内容:

override func viewWillDisappear(animated: Bool) {
    super.viewWillDisappear(animated)
    self.searchController.active = false
    tableView.reloadData()
}

希望这有帮助。

答案 1 :(得分:3)

我认为您需要在选项卡之间切换时捕获事件。当您从 Tab1 切换到 Tab2 时,正如您所期望的那样, Tab1 viewWillDisappear将不会被调用。相反,将调用 Tab2 viewWillAppear

否则,如果要在切换标签时捕获事件,请检查this link

答案 2 :(得分:2)

那是因为您已经创建了tabBarController,并且您正在从mainView推送它作为viewController。

因此整个TabBarController被视为一个viewController。

希望这会对你有所帮助。

答案 3 :(得分:1)

如果要调用此方法,请创建nsnotification中心对象viewWillDisappear 当你想要通知这个方法发布此通知时。

答案 4 :(得分:0)

这就是我开始工作的方式。

// UITabBarControllerDelegate
    func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {

        print("Selected view controller")

        // do stuff...
        self.navigationController?.setNavigationBarHidden(false, animated: false)

        return true
    }