我有一个名为TableVC
的UITableViewController和一个名为CustomCell
的自定义UITableViewCell。在CustomCell
类中,我有一个UIButton:
@IBAction func reloadTableView(sender: AnyObject) {
TableVC().tableView.reloadData()
}
点击相应的按钮时,似乎不会更新/重新加载我的表格视图。为什么不,我该怎么做才能解决我的问题?
谢谢!
答案 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()