如何知道 dismissModalViewControllerAnimated 是何时被启动和何时完成?

6

有没有一种方法可以知道 dismissModalViewControllerAnimated 何时启动以及何时完成(例如 viewWillAppear 和 viewDidAppear 的习语)?与其他动画不同,这个动画似乎没有委托告诉您。

3个回答

10

是的,比你想象的要简单。

当调用dismissModalViewControllerAnimated:时,即将显示的底层视图将接收到viewWillAppear和viewDidAppear消息。

注意:确保你的视图控制器正确连接,否则这些消息可能会丢失。


谢谢,我的委托签名有误,所以我认为在完成解除时它没有被调用。 - Boon
这个委托的签名是什么样的? - AlvinfromDiaspar
4
我已经实现了viewDidAppear和viewWillAppear,但是当模态视图控制器以partial-curlup样式被调用时,这些代理方法不会被调用。有什么想法吗? - AlvinfromDiaspar

5

我担心viewWillAppear和viewDidAppear并不总是有效。 在iPhone上,它们会运行,但在iPad上可能不会。 如果UIViewController没有全屏呈现(例如以表单表格的形式呈现),父视图将不会接收到viewWillAppear或viewDidAppear生命周期函数。不幸的是,我找到的唯一方法是创建自己的委托消息,在调用dismissModalViewControllerAnimated时被调用(通过引用或通知)。


1

你可以使用视图外观方法。如果你需要在动画完成后执行某些操作,可以使用[object performSelector:@selector(selector) withObject:anotherObject afterDelay:0]。我不确定为什么,但是这个操作会被安排在当前运行循环中,但是在动画完成之后。


1
从 iOS 5 开始,请使用 -dismissViewControllerAnimated:completion: 并使用完成块在动画完成后执行任何操作。 - Victor Bogdan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接