【问题标题】:Obj C - Present view controllers one after anotherObj C - 一个接一个地呈现视图控制器
【发布时间】:2020-07-14 20:40:42
【问题描述】:

这可能很简单,但我正在摸索着找出问题所在。

我正在展示UINavigationController,一旦它被解雇,我需要展示另一个UITabBarController,当我这样做时,我得到以下错误

警告:尝试在 ParentViewController: 0XXX> 其视图不在窗口层次结构中!

UINavigationController *nav = [self.storyboard instantiateViewControllerWithIdentifier:@"myWeb"];
MyWebViewController *webVC = (MyWebViewController *)nav.topViewController;
[self presentViewController:webVC animated:YES completion:nil];

我可以看到MyWebViewController 的呈现没有任何问题,一旦前一个被关闭,我尝试如下呈现下一个,我收到上述警告。

MyTabBarViewController *trController = [[MyTabBarViewController alloc] init];
[self presentViewController:trController animated:NO completion:nil];

【问题讨论】:

    标签: ios objective-c swift uiviewcontroller


    【解决方案1】:

    只有在 MyWebViewController 完成关闭时,您才需要呈现 MyTabBarViewController, 尝试添加这样的延迟:

    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 1 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
        MyTabBarViewController *trController = [[MyTabBarViewController alloc] init];
        [self presentViewController:trController animated:NO completion:nil];
    });
    
    

    如果这可行,您将需要摆脱它(以防您想保持代码干净)并在 completion 中调用一个委托方法,告诉父级 MyTabBarViewController 已准备好呈现。

    【讨论】:

    • 是的,我在第一个视图控制器解除函数的回调中呈现第二个视图控制器..
    • 哦,太好了...我可以看到当我添加延迟时它正在工作...您能否解释一下在完成内调用委托方法
    • youtube.com/watch?v=yDL639kpNro 这个人是最棒的。我真的建议你看看raywenderlich.com
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-12
    • 2017-09-19
    • 2017-02-03
    • 1970-01-01
    • 1970-01-01
    • 2016-11-20
    相关资源
    最近更新 更多