Mis*_*cha 5 uitabbarcontroller reloaddata ios
我有UITabBarController四个标签。在选择选项卡时显示的每个视图控制器中,我都有一个重置按钮。点击按钮将改变所有视图控制器的外观。特别是,它会改变不同视图控制器中某些标签的文本。
是否有一些推荐的方法可以同时更新 a 的所有视图控制器,UITabBarController即让它们重新加载视图?
我目前的方法是使这些视图控制器符合协议
@protocol XYReloadableViewController
- (void)reloadContents;
@end
Run Code Online (Sandbox Code Playgroud)
然后-reloadContents在点击按钮时将消息发送到所有视图控制器:
- (IBAction)touchUpInsideResetButton {
// ...
NSArray *viewControllers = self.tabBarController.viewControllers;
for (UIViewController<XYReloadableViewController> *viewController in viewControllers) {
[viewController reloadContents];
}
}
Run Code Online (Sandbox Code Playgroud)
然后在每个视图控制器中,我必须实现该方法:
- (void)reloadContents {
[self.tableView reloadData];
// other updates to UI ...
}
Run Code Online (Sandbox Code Playgroud)
但这似乎有点太复杂了。那么有没有更简单的方法来告诉视图控制器重新加载他们的视图?
编辑:如果我UINavigationController在某些选项卡或容器视图控制器中显示 a 会发生什么?我需要沿着所有子视图控制器的链传递消息......
通知听起来更适合这个。当视图控制器需要重置时,广播并NSNotification让任何可能需要重置自身的视图控制器监听该通知,并触发它们需要执行的操作。这样,它们在导航堆栈中的位置就无关紧要了。
您可能希望推迟更新,直到视图实际出现。您可以设置BOOL needsUpdateVC 何时收到通知,但只在 中进行实际更新viewWillAppear:,以节省资源并防止立即进行大量更新(并且可能会阻塞主线程)。
如果此行为对于所有视图控制器都很常见,请创建一个UIViewController子类以防止重复代码并让它们全部继承。或者,(如果您使用的是 Apple VC 子类)创建一个类别UIViewController以添加通知方法。
| 归档时间: |
|
| 查看次数: |
2157 次 |
| 最近记录: |