我正在为 iPhone 创建一个选项卡栏应用程序,我希望在选择新选项卡时完全卸载/释放当前处于事件状态的任何 View 。当重新选择任何选项卡时,我希望它必须重新加载所有内容。我寻求此功能的原因是因为所有 View 都与单个数据库交互,并且可以修改数据库。构建 View 时,它们是根据当前数据库构建的,这意味着它们可能会过时而无需强制重新加载 View 。
要查看我指的是什么,请在您的 iPhone 上加载“电话”应用程序,然后您可以在键盘上输入一个数字,切换标签页,再切换回键盘,您输入的数字将保留在那里。这对于电话应用程序来说是一个理想的特性,但对于我正在设计的东西来说并不是那么多。
有办法实现吗?或者,我应该使用其他方法在切换标签时更新我的 View 吗?
最佳答案
我认为 Neil Galiaskarov 评论说你不应该考虑发布 View 。他将当前的重新加载逻辑放在 -(void)viewWillAppear
中的想法很合理:
-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppeared:animated];
// Any code you are currently triggering in your init / viewDidLoad
// to reload your database and display the result
}
每次您通过选项卡栏返回时都会触发此操作,并且应该会为您提供所需的结果。但是,根据您下一步的操作,有一些注意事项可能无法提供所需的功能:
- 当通过弹出堆栈到达屏幕时,屏幕将被更新(根据您的描述,这可能没问题)。
- 如果您开始使用滑动手势在堆栈中向后导航,但中止导航,屏幕也会更新。 (因为这会触发
viewWillAppear
和viewDidAppear
)。
如果后者是一个问题,一种方法是通过 BOOL _shouldTriggerReload;
来处理它:
将 viewWillAppear
逻辑包装在 if 中:
if (_shouldTriggerReload){
_shouldTriggerReload = NO; // Preparing for the next round
// Any code you are currently triggering in your init / viewDidLoad
// to reload your database and display the result
}
然后在你的 viewDidDisappear
中:
- (void)viewDidDisappear:(BOOL)animated{
[super viewDidDisappear:animated];
_shouldTriggerReload = YES;
}
而且还必须在您的 viewDidLoad 中为第一个条目设置它:
- (void)viewDidLoad{
_shouldTriggerReload = YES;
}
关于ios - 关于 UITabBarController,有没有办法在选择新选项卡时强制完全释放 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21642757/