如何从Swift中的不同ViewController重新加载TableView中的数据

时间:2015-05-30 00:36:39

标签: ios swift uiviewcontroller reloaddata

在ViewController中,我尝试在另一个ViewController中的TableView中重新加载数据,如下所示:

    (self.presentedViewController as! tableViewController).table.reloadData()

其中tableViewController是TableView控制器中的类(我知道它不是上骆驼的情况),而table是TableView。好吧,这样做会产生"致命错误:在打开一个Optional值时出乎意料地发现nil"我认为这是有道理的,因为" presentsViewController"还没有加载。 我也试过这个:

    (self.navigationController!.viewControllers[self.navigationController!.viewControllers.count - 2] as! tableViewController).table.reloadData()

产生了相同的结果(我确保tableViewController在navigationController堆栈的当前ViewController下)。我对我应该做什么感到困惑......我觉得在不同的视图控制器中引用属性应该更容易。我可能有点模糊;如果我,请告诉我你需要知道什么!

1 个答案:

答案 0 :(得分:39)

Xcode 9•Swift 4

创建通知名称:

extension Notification.Name {
    static let reload = Notification.Name("reload")
}

您可以发布通知

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()
}