在UITabBar的每个UINavigationController中重新加载所有UIViewControllers

时间:2014-11-13 23:59:10

标签: ios objective-c uiview uiviewcontroller uitabbarcontroller

我有一个基于标签的应用程序,我想更新当我点击一个按钮时重新加载它们的所有UIViewControllers中显示的信息。

我已经尝试了几种方法来补充视图控制器,如[view setNeedsDisplay]和[view setNeedsLayout],但没有成功。我还迭代了标签栏的所有导航控制器和它的视图控制器并应用了这个函数调用,但也没有成功。

任何人都可以帮我吗?

2 个答案:

答案 0 :(得分:2)

您基本上将此添加到要刷新的所有控制器:

- (instancetype)init
{
    self = [super init];
    if (self) {
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(refreshAllViews:) name:@"RefreshAllViews" object:nil];
    }
    return self;
}
- (void)refreshAllViews:(NSNotification *)notification
{
    // Reload all the data and views you want here
    // eg. [self.tableView reloadData];
}

- (void)reloadAllViewsAction:(id)sender
{
    // Call this from the button to refresh all views
    [[NSNotificationCenter defaultCenter] postNotificationName:@"RefreshAllViews" object:nil userInfo:nil];
}

答案 1 :(得分:0)

两个选项:
(1)当用户点击按钮时,使用notification发送通知(可能带有一些信息),以便对该通知感兴趣的所有view controllers可以相应地更新自己; (2)将信息存储在共享的modelSingleton)中,以便所有view controllers可以访问该信息,并且对于每个视图控制器,根据viewWillAppear更新UI共享model