【问题标题】:Presenting a modal view controller only after another one has been dismissed仅在关闭另一个模式视图控制器后才呈现模式视图控制器
【发布时间】:2009-07-30 18:06:14
【问题描述】:

我做不到

[myViewController dismissModalViewControllerAnimated:YES];
[myViewController presentModalViewController:nextModalViewController animated:YES];

一个接一个,因为这两个动画块试图同时影响相同的引用,结果很糟糕。

所以我需要做的是仅在第一个动画完成后才进行后一个调用。但是没有像didDismissModalViewController 这样的UIViewControllerDelegate 方法。我该怎么办?

【问题讨论】:

    标签: iphone objective-c cocoa-touch


    【解决方案1】:

    这有点 hacky(好吧,也许很多 hacky),但你可以简单地在固定延迟后呈现第二个:

    [myViewController performSelector:@selector(showSecondModalView) withObject:nil afterDelay:0.5];
    

    (或任何动画持续时间)。

    【讨论】:

    • 我同意这个答案,因为苹果没有为此提供更好的解决方案
    • 嘿,即使我有类似的问题,上述解决方案对我有用..谢谢。我有一个疑问,如何显示第一个->第二个->再次第一个->再次显示第二个模态视图控制器?(即依次显示第一个和第二个模态视图控制器)
    【解决方案2】:

    仅子类化视图控制器(如果您还没有)并这样做有什么问题:

     - (void) viewDidDisappear: (BOOL) animated
     {
         [super viewDidDisappear: animated];
    
    
         [myViewController presentModalViewController:nextModalViewController animated:YES];
     }
    

    我不确定您是如何处理对视图控制器的引用,但我想说的只是捕捉正在滑落的模型视图控制器的 viewDidDisappear。

    【讨论】:

    • 嘿,谢谢你的建议!这似乎有效。一个警告是我必须使用 performSelectorOnMainThread:withObject:waitUntilDone: 即使它已经在主线程中,只是为了在新的 presentModalViewController:animated: 调用再次开始之前清除所有由解雇触发的内部通知.否则我会得到一个 EXC_BAD_ACCESS。
    猜你喜欢
    • 1970-01-01
    • 2017-02-03
    • 2016-11-20
    • 2014-12-12
    • 2011-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多