• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 关于UITabBarController,有没有办法在选择新选项卡时强制 View 完全释放

[复制链接]
菜鸟教程小白 发表于 2022-12-13 06:16:28 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我正在为 iPhone 创建一个标签栏应用程序,如果选择了一个新标签,我希望当前处于事件状态的任何 View 都能完全卸载/释放。当重新选择任何选项卡时,我希望它必须重新加载所有内容。我寻求此功能的原因是因为所有 View 都与单个数据库交互,并且可以修改数据库。构建 View 时,它们是从当前数据库构建的,这意味着它们可以在不强制重新加载 View 的情况下过期。

要查看我所指的内容,请在 iPhone 上加载“电话”应用程序,然后您可以在键盘上输入一个数字、切换选项卡、切换回键盘,然后您输入的数字就会保留在那里。这对于 Phone 应用来说是一个理想的特性,但对于我正在设计的应用来说并不是那么重要。

有没有办法做到这一点?或者,我应该在切换选项卡时使用其他方法来更新我的 View 吗?



Best Answer-推荐答案


我认为 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
}

每次您通过标签栏返回时都会触发此事件,并且应该为您提供您想要的结果。但是,根据您接下来要执行的操作,有一些警告可能无法提供所需的功能:

  • 通过弹出堆栈到达屏幕时将更新屏幕(根据您的描述,这可能是可以的)。
  • 如果您开始使用滑动手势在堆栈中向后导航但中止导航,则屏幕也会更新。 (因为这会触发 viewWillAppearviewDidAppear)。

如果后者是一个问题,可以通过 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/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap