swift - 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 ,但也没有用。
对于如何让页面控制器重新加载带有新数据的表控制器,我真的很困惑。我不认为问题出在桌面控制器上,但我愿意尝试任何事情。有人有想法么?
解决方案
所以原因不是我列出的任何原因。去搞清楚。相反,这是我定义表控制器的方式。我在定义控制器时而不是在加载控制器时设置了它们用于加载的值。
所以
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
因为数据是在我获得要加载的控制器时定义的,而不是预定义的。
希望这将帮助其他人不要做我所做的同样的事情,并设置您需要其他控制器使用的任何值,而不是在您定义控制器时定义,而是稍后在您需要使用控制器时定义。
推荐阅读
- sql-server - 编写通用存储过程以从表中获取值的缺点
- android - 此版本中使用了已弃用的 Gradle 功能,使其与 Gradle 6.0 不兼容?当我降级 gradle 版本时
- django - 在 django_admin_log 中添加页面查看记录和更改详情
- redis - Redis MATCH操作中如何使用OR条件
- ajax - 在wordpress中将数组从ajax传递到php
- angular - Angular Reactive Forms 控件与 Get
- javascript - 带单选按钮的角度动态 html 绑定
- c - 在 C 中设置 open() 系统调用的权限
- javascript - 无法在浏览器上运行的 Swiper 已调整为 chrome 中的智能手机视图
- popup - 为什么要使用工作表或弹出框?有没有其他选择?