gpt4 book ai didi

ios - viewWillAppear 没有被调用

转载 作者:行者123 更新时间:2023-11-28 19:40:54 31 4
gpt4 key购买 nike

我有一个嵌入在导航 Controller (NAV1) 中的 View Controller (VC1)。在它的 viewWillAppear 方法中,我调用以模态方式呈现另一个 View Controller 。在一种情况下,我需要新的 View Controller (VC2) 呈现动画,而在另一种情况下,它应该在没有动画的情况下呈现。 VC2也嵌入了自己的导航 Controller (NAV2)。

当动画标志设置为 TRUE 时一切正常。当我将标志设置为 FALSE 时,出现了一些错误:1. 我在控制台中收到以下警告:Presenting view controllers on detached view controllers is discouraged2. 当我在调用 dismissViewControllerAnimated:FALSE completion:nil 后从 VC2 返回时,不会调用 VC1 的 viewWillAppear 方法。如果动画标志设置为 TRUE,则会调用它。

在 VC1 中:

- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];

[self performSelector:@selector(importStuff:)
withObject:nil];

}

-(void)importStuff
{
//instatntiate VC2
//instantiate NAV2

[Utility presentViewController:pNavController
fromViewController:self
animated:FALSE
completion:nil];

// the above method calls the presentViewController:animated:completion: method
}

在 VC2 中:

[Utility dismissViewController:self
animated:FALSE
completion:nil];

上述方法调用了dismissViewControllerAnimated:方法。

最佳答案

不是解决方案,而是解决方法:

您可以使用 afterDelay:0 轻松地将任何 UI 操作推迟到下一个事件循环:

[self performSelector:@selector(importStuff:)
withObject:nil
afterDelay:0];

这将使当前操作有机会完成。
此外,0.4 的延迟将与操作系统匹配。但是,无论您使用什么延迟(除了 0) 都是一个小问题,不能保证在任何情况、设备和内存负载等情况下都能正常工作。

相反,您应该重新审视您的方法。


改变你的设计:

首先不要冒险遇到这个动画比赛。您有多种选择,包括:

  • 自己控制过渡动画并等待其完成,然后再推送另一个 View Controller (使用完成信号或完成 block )
  • 完全改变你的方法来完全避免这个难题

关于ios - viewWillAppear 没有被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34350565/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com