PresentViewController完成块调用太快了

时间:2015-02-05 21:51:30

标签: ios callback viewcontroller

我是从另一个模态呈现ViewController。立即调用完成块,同时仍显示所呈现的VC。那为什么会这样?代码如下。

UIStoryboard* sb = [UIStoryboard storyboardWithName:...];
UINavigationController* nc = [sb instantiateViewController...];
nc.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentViewController:nc
                   animated:YES
                 completion:^{ /* Called immediately! */ }];

只有当呈现的VC 完成时才会有我想做的事情。我有一个解决方法但我的理解是我应该能够在完成块中完成它。

2 个答案:

答案 0 :(得分:0)

根据Apple的文档,一旦显示了viewController,就会调用完成块。这是预期的行为:https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIViewController_Class/index.html#//apple_ref/occ/instm/UIViewController/presentViewController:animated:completion

我建议在viewController的viewWillDissappear中连接某种回调,以便在必要时执行操作。

答案 1 :(得分:0)

好的我有RTFM,看到了这个:“完成:演示完成后要执行的块。”哪个确实暗示了我的想法。充其量是暧昧的。

但是......其他地方我们读到“在显示的视图控制器上调用viewDidAppear:方法之后调用完成处理程序。”这是另一回事,并证实伊恩。

所以我的解决方法实际上是正确的方法......