我有一个带有四个选项卡的 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 和方法:
- -(void)reloadContents;
- -(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/