我在我的应用程序中创建了5个选项卡。在 Tab1 中,我有UITableView
。在didSelectRowAtIndexPath
我正在导航到另一个UIView,我正在显示我的所有5个标签。我也在那个导航视图中播放歌曲。
现在当我点击导航中的返回按钮并再次转到原始视图时,我可以拨打viewWillDisappear
(正常情况和正常情况)。
但是当我直接点击另一个标签时,导航的视图中不会调用viewWillDisappear
。为什么会发生这种情况?
我刚才想到,当我直接点击另一个标签时, Tab1 中的视图会调用 viewWillDisappear 。但导航视图不会调用该方法。
那么可能的解决方案是什么?请给一些提示......
答案 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
}