我的IOS应用程序中有五个选项卡栏,其中一个中有UITableView
。我希望每次转到该选项卡时都重新加载tableview。关于如何解决它的任何帮助。我意识到当我在标签栏viewDidLoad
和viewWillAppear
之间导航时,不会被调用。
答案 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)
我希望这会有所帮助!