我正在为 iPhone 创建一个标签栏应用程序,如果选择了一个新标签,我希望当前处于事件状态的任何 View 都能完全卸载/释放。当重新选择任何选项卡时,我希望它必须重新加载所有内容。我寻求此功能的原因是因为所有 View 都与单个数据库交互,并且可以修改数据库。构建 View 时,它们是从当前数据库构建的,这意味着它们可以在不强制重新加载 View 的情况下过期。
要查看我所指的内容,请在 iPhone 上加载“电话”应用程序,然后您可以在键盘上输入一个数字、切换选项卡、切换回键盘,然后您输入的数字就会保留在那里。这对于 Phone 应用来说是一个理想的特性,但对于我正在设计的应用来说并不是那么重要。
有没有办法做到这一点?或者,我应该在切换选项卡时使用其他方法来更新我的 View 吗?
Best Answer-推荐答案 strong>
我认为 Neil Galiaskarov 评论说您不应该考虑发布该 View 。他将您当前的重新加载逻辑放入 -(void)viewWillAppear 的想法是合理的:
-(void)viewWillAppearBOOL)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)viewDidDisappearBOOL)animated{
[super viewDidDisappear:animated];
_shouldTriggerReload = YES;
}
而且它还必须在你的 viewDidLoad 中为第一个条目设置:
- (void)viewDidLoad{
_shouldTriggerReload = YES;
}
关于ios - 关于UITabBarController,有没有办法在选择新选项卡时强制 View 完全释放,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/21642757/
|