Swift:从自定义UITableViewCell内的UIButton更新UITableView

时间:2016-10-14 04:59:25

标签: swift uitableview

我有一个名为TableVC的UITableViewController和一个名为CustomCell的自定义UITableViewCell。在CustomCell类中,我有一个UIButton:

@IBAction func reloadTableView(sender: AnyObject) {

    TableVC().tableView.reloadData()

}

点击相应的按钮时,似乎不会更新/重新加载我的表格视图。为什么不,我该怎么做才能解决我的问题?

谢谢!

3 个答案:

答案 0 :(得分:1)

您可以通过多种方式获取单元格的tableView。您单元格的超级视图应为UITableView类型,因此在您的单元格中,您可以(superview as? UITableView)?.reloadData()

然而,更稳定的方法是使用响应者的层次结构。我创建了一个非常有用的扩展,允许您找到特定类型的下一个响应者,例如UITableView

extension UIResponder {

    func nextResponder<T: UIResponder>(ofType type: T.Type) -> T? {

        switch nextResponder() {

        case let responder as T:
            return responder

        case let .Some(responder):
            return responder.nextResponder(ofType: type)

        default:
            return nil
        }
    }
}

这是一个递归函数,因此它会爬上响应者层次结构,直到它成功地将响应者强制转换为提供的类型,或者用尽响应者来尝试和转换。

@IBAction func reloadTableView(sender: AnyObject) {

    nextResponder(ofType: UITableView.self)?.reloadData()
}

答案 1 :(得分:0)

每当您单击一个按钮时,您正在创建一个新的TableVC实例,并且您正在重新加载该tableview数据。而不是在这个地方存储TableVC对象并在其上重新加载数据。要么创建一个TableVC的IBOutlet,要么在类中创建一个属性,并将TableVC ref赋值给它。

答案 2 :(得分:0)

仅使用

   self.tableView.reloadData()