CodeGrue是正确的。在经过数天思考[subclassOjb.tableView reloadData]为什么不起作用后,我放弃了尝试理解它,并采用了我知道的唯一两种方法,这两种方法非常容易实现:1-通知中心(从tableviewcell您不应该使用此方法)2-或使用superview获取您的tableview属性的句柄(这对uitableviewcells非常完美)。
请注意,使用superview方法仅适用于您的uitableviewcell类,如果您有自定义单元格,则很有可能您将具有uitableviewcell类,其中superview是您的tableviewcontroller或任何带有uitableview委托+数据源的whateverClass。
现在,如果您需要从另一个类重新加载表视图,例如数据源类,比如单例或其他类,则应在您的tableview类中使用块在不同线程上加载数据,并使用内部块在主线程上重新加载表格。
[self.tableView setContentOffset:CGPointMake(0, -rf.frame.size.height) animated:YES];
[rf beginRefreshing];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,
(unsigned long)NULL), ^(void) {
[myDataSourceClass fetchDataMethod];
dispatch_async(dispatch_get_main_queue(), ^{
[self.tableView reloadData];
[rf endRefreshing];
[self.tableView setContentOffset:CGPointMake(0, 0) animated:YES];
});
});
如果您在不同的视图中,发生需要重新加载表格视图的情况。那么此时您的表格不在屏幕上,如果没有人会看到它,就没有理由重新加载表格。只需在viewWillAppear方法中添加[self.tableview reloadData],当用户返回到您的tableviewcontroller视图时,它将实时重新加载表格。
无论如何,对于tableviewcell,只需在操作中使用以下代码即可reloadData(感谢CodeGrue)
UITableView *parentTable = (UITableView *)self.superview
[parentTable reloadData]
虽然话题不同,但对于那些刚开始学习的人来说,这将避免可能出现的头痛 - 在创建表格类并在处理其委托方法之前,执行以下操作:在您的viewDidLoad中添加以下代码:
self.tableView.delegate = self
self.tableView.dataSource = self
UIView
。 - ninjaneer