首页 > 解决方案 > UIPageViewController 不会刷新 UITableViewControllers

问题描述

有一个控制器,我们称之为 Bob,作为一个模态,它包含一些标签和一个加载 2 个表控制器的 UIPageViewController。页面控制器第一次加载时,它会加载所有正确数据的表控制器。每当 Bob 再次打开时,表控制器的数据都不会改变。Bob 的标签确实发生了变化,因此它收到了来自其父级的不同请求。

pageController 是 UIPageViewController 的名称

我尝试在 pageController 的数据源部分执行以下操作

pageController.dataSource = nil
pageController.dataSource = self

但它没有用。我也尝试在加载新数据后再次设置控制器,但也没有用

pageController.setViewControllers([viewController(At: 0)!], direction: .forward, animated: true, completion: nil)

在表控制器中,它们被设置为像这样刷新数据,并且在将新数据传递给它们之后调用它。我已经验证了每当 Bob 打开时都会调用它。

DispatchQueue.main.async(execute: { () -> Void in
        self.tableView.reloadData()
    })

我也尝试过完全重新创建 UIPageViewController ,但也没有用。

对于如何让页面控制器重新加载带有新数据的表控制器,我真的很困惑。我不认为问题出在桌面控制器上,但我愿意尝试任何事情。有人有想法么?

标签: swiftuipageviewcontroller

解决方案


所以原因不是我列出的任何原因。去搞清楚。相反,这是我定义表控制器的方式。我在定义控制器时而不是在加载控制器时设置了它们用于加载的值。

所以

private lazy var thatTableViewController: ThatTableViewController = {
    let storyboard = UIStoryboard(name: "ModalsStoryBoard", bundle: Bundle.main)
    var viewController = storyboard.instantiateViewController(withIdentifier: "ThatTableViewController") as! ThatTableViewController
    viewController.view.tag = 0
    return viewController
}()

以前也有这样的线

viewController.controller = Controller(id: self.markerId, activeController: .Problem)

Controller 是我传递的自定义结构。但是通过将其设置在与定义 TableViewController 的变量相同的级别,它不会在调用之间更改,因为它已被缓存。所以移动

viewController.controller = Controller(id: self.markerId, activeController: .Problem)

在定义部分之外,允许它被更改而不被缓存。

这然后允许我删除

pageController.dataSource = nil
pageController.dataSource = self

因为数据是在我获得要加载的控制器时定义的,而不是预定义的。

希望这将帮助其他人不要做我所做的同样的事情,并设置您需要其他控制器使用的任何值,而不是在您定义控制器时定义,而是稍后在您需要使用控制器时定义。


推荐阅读