如何从 Swift 中的不同 ViewController 重新加载 TableView 中的数据
How to reload data in a TableView from a different ViewController in Swift
在 ViewController 中,我正在尝试在另一个 ViewController 中的 TableView 中重新加载数据,如下所示:
(self.presentedViewController as! tableViewController).table.reloadData()
其中 tableViewController 是 TableView 控制器中的 class(我知道这不是大驼峰式),table 是 TableView。好吧,这样做会产生 "fatal error: unexpectedly found nil while unwrapping an Optional value",我想这是有道理的,因为 "presentedViewController" 还没有被加载。
我也试过这个:
(self.navigationController!.viewControllers[self.navigationController!.viewControllers.count - 2] as! tableViewController).table.reloadData()
产生了相同的结果(我确保 tableViewController 在 navigationController 堆栈上的当前 ViewController 之下。我对我应该做什么感到困惑……我觉得在不同的视图控制器中引用属性应该更容易。我可能有点含糊;如果我是,告诉我你需要知道什么!
Xcode 9 • Swift 4
创建通知名称:
extension Notification.Name {
static let reload = Notification.Name("reload")
}
您可以post通知
NotificationCenter.default.post(name: .reload, object: nil)
并在要重新加载数据的视图控制器中添加一个观察者:
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector: #selector(reloadTableData), name: .reload, object: nil)
}
@objc func reloadTableData(_ notification: Notification) {
tableView.reloadData()
}
在 ViewController 中,我正在尝试在另一个 ViewController 中的 TableView 中重新加载数据,如下所示:
(self.presentedViewController as! tableViewController).table.reloadData()
其中 tableViewController 是 TableView 控制器中的 class(我知道这不是大驼峰式),table 是 TableView。好吧,这样做会产生 "fatal error: unexpectedly found nil while unwrapping an Optional value",我想这是有道理的,因为 "presentedViewController" 还没有被加载。 我也试过这个:
(self.navigationController!.viewControllers[self.navigationController!.viewControllers.count - 2] as! tableViewController).table.reloadData()
产生了相同的结果(我确保 tableViewController 在 navigationController 堆栈上的当前 ViewController 之下。我对我应该做什么感到困惑……我觉得在不同的视图控制器中引用属性应该更容易。我可能有点含糊;如果我是,告诉我你需要知道什么!
Xcode 9 • Swift 4
创建通知名称:
extension Notification.Name {
static let reload = Notification.Name("reload")
}
您可以post通知
NotificationCenter.default.post(name: .reload, object: nil)
并在要重新加载数据的视图控制器中添加一个观察者:
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector: #selector(reloadTableData), name: .reload, object: nil)
}
@objc func reloadTableData(_ notification: Notification) {
tableView.reloadData()
}