ios - 关于UITabBarController,有没有办法在选择新选项卡时强制 View 完全释放
<p><p>我正在为 iPhone 创建一个标签栏应用程序,如果选择了一个新标签,我希望当前处于事件状态的任何 View 都能完全卸载/释放。当重新选择任何选项卡时,我希望它必须重新加载所有内容。我寻求此功能的原因是因为所有 View 都与单个数据库交互,并且可以修改数据库。构建 View 时,它们是从当前数据库构建的,这意味着它们可以在不强制重新加载 View 的情况下过期。</p>
<p>要查看我所指的内容,请在 iPhone 上加载“电话”应用程序,然后您可以在键盘上输入一个数字、切换选项卡、切换回键盘,然后您输入的数字就会保留在那里。这对于 Phone 应用来说是一个理想的特性,但对于我正在设计的应用来说并不是那么重要。</p>
<p>有没有办法做到这一点?或者,我应该在切换选项卡时使用其他方法来更新我的 View 吗?</p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>我认为 Neil Galiaskarov 评论说您不应该考虑发布该 View 。他将您当前的重新加载逻辑放入 <code>-(void)viewWillAppear</code> 的想法是合理的:</p>
<pre><code>-(void)viewWillAppear:(BOOL)animated{
;
// Any code you are currently triggering in your init / viewDidLoad
// to reload your database and display the result
}
</code></pre>
<p>每次您通过标签栏返回时都会触发此事件,并且应该为您提供您想要的结果。但是,根据您接下来要执行的操作,有一些警告可能无法提供所需的功能:</p>
<ul>
<li>通过弹出堆栈到达屏幕时将更新屏幕(根据您的描述,这可能是可以的)。</li>
<li>如果您开始使用滑动手势在堆栈中向后导航但中止导航,则屏幕也会更新。 (因为这会触发 <code>viewWillAppear</code> 和 <code>viewDidAppear</code>)。</li>
</ul>
<p>如果后者是一个问题,可以通过 <code>BOOL _shouldTriggerReload;</code>:</p>
<p>将 <code>viewWillAppear</code> 逻辑包装在 if 中:</p>
<pre><code>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
}
</code></pre>
<p>然后在你的 <code>viewDidDisappear</code> 中:</p>
<pre><code>- (void)viewDidDisappear:(BOOL)animated{
;
_shouldTriggerReload = YES;
}
</code></pre>
<p>而且它还必须在你的 viewDidLoad 中为第一个条目设置:</p>
<pre><code>- (void)viewDidLoad{
_shouldTriggerReload = YES;
}
</code></pre></p>
<p style="font-size: 20px;">关于ios - 关于UITabBarController,有没有办法在选择新选项卡时强制 View 完全释放,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/21642757/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/21642757/
</a>
</p>
页:
[1]