从一个子视图或者一个View中刷新其余UITableView

被问到了一个问题:如何从一个子视图或者一个View中刷新其余UITableView,常规的写法多是这样的post

TestTVC*testTVC =[[TestTVC alloc] init];
[testTVC loadData];线程

这时你能够看看UITableView是不会被刷新的,起码cellForRowAtIndexPath是不会运行的,为何呢?由于对TestTVC这样init实际是从新init了一个TestTVC,而loadData不会对已有的TestTVC有做用的。可是loadData方法中若是有API的数据操做这个是会成功的。可是并不会从新渲染tableview。orm

看到网上2个最广泛的答案是:server

1. `[self.tableView reloadRowsAtIndexPaths:[self.tableView indexPathsForVisibleRows] withRowAnimation:UITableViewRowAnimationNone];`这也是不行的,任何涉及刷新view的操做都是不会成功的,尽管它比self.tableView reloaddata好一些能够让 `cellForRowAtIndexPath` 有反应了,可是依然刷新不了数据。it

2.  主线程调用,`[testTVC performSelectorOnMainThread:@selector(loadData) withObject:nil waitUntilDone:NO];` 依然只会更新数据不会刷新视图io

解决方案是使用通知:table

[[NSNotificationCenter defaultCenter] postNotificationName:RELOAD_DATA object:self];form

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(loadData) name:RELOAD_DATA object:nil];test

—EOF— object

相关文章
相关标签/搜索