首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未调用viewWillAppear

未调用viewWillAppear
EN

Stack Overflow用户
提问于 2015-12-18 15:36:16
回答 2查看 680关注 0票数 0

我在导航控制器(NAV1)中嵌入了视图控制器(VC1)。在它的viewWillAppear方法中,我进行了一个调用,以模态的方式呈现另一个视图控制器。在一种情况下,我需要用动画表示新的视图控制器(VC2),而在另一种情况下,它应该不带动画地表示。VC2还嵌入到它自己的导航控制器(NAV2)中。

当动画标志设置为TRUE时,一切正常。当我将标志设置为FALSE时,出现了一些错误: 1.我在控制台中收到以下警告:不鼓励在分离的视图控制器上呈现视图控制器2.当我在调用dismissViewControllerAnimated:FALSE completion:nil之后从VC2移回时,未调用VC1的viewWillAppear方法。如果动画标志设置为TRUE,它将被调用。

在VC1中:

代码语言:javascript
复制
- (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中:

代码语言:javascript
复制
[Utility dismissViewController:self
                      animated:FALSE
                    completion:nil];

上面的方法调用dismissViewControllerAnimated:方法。

EN

回答 2

Stack Overflow用户

发布于 2015-12-18 16:05:57

这不是一种解决方案,而是一种解决方法:

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

代码语言:javascript
复制
[self performSelector:@selector(importStuff:)
           withObject:nil
           afterDelay:0];

这将使当前操作有机会完成。

此外,0.4的延迟将与操作系统匹配。然而,无论你使用什么延迟(不是0)都是一个杂乱无章的东西,不能保证在任何情况下都能工作,设备和内存负载等等。

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

更改您的设计:

不要一开始就冒着遇到这场动画竞赛的风险。您有几个选项,包括:

自己控制过渡动画并等待其完成,然后再推送另一个视图控制器(使用完成信号或完成block)

  • Changing您的方法,以完全避免这个难题
票数 3
EN

Stack Overflow用户

发布于 2015-12-18 16:06:23

代码语言:javascript
复制
-(void)viewWillAppear:(BOOL)animated{

    [super viewWillAppear:animated];
    [self performSelector:@selector(importStuff) withObject:nil afterDelay:0.1];

   }

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

    SecondViewController *viewMe=[self.storyboard instantiateViewControllerWithIdentifier:@"second"];
    [self.view.window.rootViewController presentViewController:viewMe animated:NO completion:nil];

    // the above method calls the presentViewController:animated:completion: method
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34350565

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档