gpt4 book ai didi

ios - 更新 UITabBarController 的所有 View Controller

转载 作者:可可西里 更新时间:2023-11-01 05:35:09 25 4
gpt4 key购买 nike

我有一个带有四个选项卡的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com