在标签栏中重新加载视图控制器

时间:2018-11-15 09:17:32

标签: ios swift4.2

我的IOS应用程序中有五个选项卡栏,其中一个中有UITableView。我希望每次转到该选项卡时都重新加载tableview。关于如何解决它的任何帮助。我意识到当我在标签栏viewDidLoadviewWillAppear之间导航时,不会被调用。

2 个答案:

答案 0 :(得分:1)

最简单的方法以及我通常在您的这种情况下使用的(在当前/主要生产项目中有这种情况)是使用NotificationCenter,doc:https://developer.apple.com/documentation/foundation/notificationcenter

例如,用户将一个商品添加到他的购物车中,其他选项卡应被告知此信息。因此,用户从中添加项目的控制器(或viewModel,如果您使用MVVM)将发布通知,如下所示:

NotificationCenter.default.post(name: .userDidAddToCart, object: nil)

在此之前,每个选项卡(控制器)的每个viewDidLoad()中都已订阅该通知名称。

NotificationCenter.default.addObserver(self, selector: #selector(self.userDidAddToCart), name: .userDidAddToCart, object: nil)

这将重新加载所有选项卡中所需的所有tableViews或其他视图。

您可以尝试的另一种方法是通过委托,或者您的UITabBarController子类将这些事件通知这些选项卡。

我希望这会有所帮助!

答案 1 :(得分:0)

在添加标签视图控制器之前,您必须使用以下代码从容器中删除之前添加的视图控制器:

if self.childViewControllers.count > 0{
    let viewControllers:[UIViewController] = self.childViewControllers
    for viewContoller in viewControllers{
          viewContoller.willMove(toParentViewController: nil)
          viewContoller.view.removeFromSuperview()
          viewContoller.removeFromParentViewController()
    }
}

之后,您可以在容器视图中加载视图控制器:

let navigate = self.storyboard?.instantiateViewController(withIdentifier: "YourViewController") as! YourViewController
self.containerview.addSubview(navigate.view)
navigate.view.frame = self.containerview.bounds
self.addChildViewController(navigate)
navigate.didMove(toParentViewController: self)

我希望这会有所帮助!

相关问题