ios - 更新 UITabBarController 的所有 View Controller

标签 ios uitabbarcontroller reloaddata

我有一个带有四个选项卡的 UITabBarController。在选择选项卡时显示的每个 View Controller 中,我都有一个重置按钮。点击按钮将改变所有 View Controller 的外观。特别是,它会更改不同 View Controller 中某些标签的文本。

是否有一些推荐的方法可以同时更新 UITabBarController 的所有 View Controller ,即让它们重新加载 View ?

我目前的做法是让那些 View Controller 符合一个协议(protocol)

@protocol XYReloadableViewController
- (void)reloadContents;
@end

然后在点击按钮时向所有 View Controller 发送消息 -reloadContents:

- (IBAction)touchUpInsideResetButton {
    // ...
    NSArray *viewControllers = self.tabBarController.viewControllers;
    for (UIViewController<XYReloadableViewController> *viewController in viewControllers) {
        [viewController reloadContents];
    }
}

然后在每个 View Controller 中我必须实现该方法:

- (void)reloadContents {
    [self.tableView reloadData];
    // other updates to UI ...
}

但这似乎有点太复杂了。那么有没有更简单的方法告诉 View Controller 重新加载它们的 View ?


编辑:如果我在某些选项卡或容器 View Controller 中显示 UINavigationController 会发生什么情况?我需要沿着其所有 subview Controller 的链传递消息...

最佳答案

你可以创建 ReloadViewController 和你继承的所有 Controller 从他那里。

ReloadViewController 有属性 UIButton 和方法:

  1. -(void)reloadContents;
  2. -(IBAction)touchUpInsideResetButton:(id)发件人;

在 .m 文件中:

-(void)viewDidLoad
{
  [super viewDidLoad];
  [[NSNotificationCenter defaultCenter] addObserver:self 
                                             selector:@selector(reloadContents)
                                                 name:@"MyNotification"
                                               object:nil];
}

- (IBAction)touchUpInsideResetButton:(id)sender
{
  [[NSNotificationCenter defaultCenter] postNotificationName:@"MyNotification" 
                                                      object:nil];
}

在你的 viewControllers 中只需要覆盖方法 reloadContents

关于ios - 更新 UITabBarController 的所有 View Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23951724/

相关文章:

swift - Tableview reloadData 不适用于显示 NSUserDefaults 数组的 tableView

ios - 使用 MBProgressHUD 的断言失败 - View 不能为 nil

ios - 获取从照片库中选取的视频的缩略图

iphone - 如何从约会中减去 30 分钟

ios - 在没有调用 viewDidLoad 的情况下调用 Dealloc(删除 KVO 观察器时崩溃)

ios - 我怎么知道 Tab Bar Controller 索引是否以编程方式快速更改?

ios - 如何以编程方式设置 UITabBarController 的选定选项卡,同时在 UITabBarControllerDelegate 中触发 shouldSelectViewController

ios - UITableView:在顶部添加单元格时保持选择(单选)?

ios - [__NSCFString 重载数据] : unrecognized selector sent to instance

ios - 在 swift 应用程序中使用 println