iOS:刷新已加载的tableView

时间:2013-11-13 13:54:51

标签: ios

有没有“更短”的方式来写它?获得playerViewController实例似乎还有很长的路要走......

    UIWindow *window = [UIApplication sharedApplication].keyWindow;
    UITabBarController *tabBarController = (UITabBarController *)window.rootViewController;
    UINavigationController *navigationController = [[tabBarController viewControllers] objectAtIndex:0];
    PlayersViewController *playersViewController = [[navigationController viewControllers] objectAtIndex:0];
    [playersViewController.tableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:NO];

我正在刷新已经加载的tableView

#pragma mark - RatePlayerViewControllerDelegate
- (void)ratePlayerViewController: (RatePlayerViewController *)controller didPickRatingForPlayer:(Player *)player
{
    if (player.rating != self.requiredRating)
    {
    // do stuff.. in self.tableView
    // refresh players tableView

2 个答案:

答案 0 :(得分:1)

您可以使用通知

<强> PlayersViewController.m

在init方法中添加以下行:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reloadPlayers:) name:@"reloadPlayersNotification" object:nil];

并实施方法

- (void)reloadPlayers:(NSNotification *)notification {
    [self.tableView reloadData];
}

当tableView不能接收reloadData调用时(例如,如果tableView不可见),请记住删除观察者。

[[NSNotificationCenter defaultCenter] removeObserver:self name@"reloadPlayersNotification" object:nil]

现在如果你想从另一个类重新加载这个tableView:

[[NSNotificationCenter defaultCenter] postNotification:@"reloadPlayersNotification"];

答案 1 :(得分:0)

如果您想重新加载UITableView,请使用[self.tableView reloadData]

编辑:还有一件事要记住,你应该总是更新主线程上的视图。我不确定你到底做了什么,但是安全而不是抱歉永远不会伤害。以下内容将在主线程上重新加载tableView。

dispatch_async(dispatch_get_main_queue(), ^{
    [self.tableView reloadData];
});