【发布时间】:2013-06-26 08:35:22
【问题描述】:
我正在尝试关闭这样的视图控制器:
[composeViewController dismissViewControllerAnimated:YES completion:^{
NSLog(@"Hello"); // Never outputted
}];
视图控制器被解除,但由于某种原因,完成块从未被调用。
我从来没有遇到过其他视图控制器不调用完成块的问题。
不过,这个视图控制器是“特殊的”,因为它是作为子视图控制器添加的(我以前在我的应用程序中没有使用过)。这是否会产生任何副作用,为什么不调用完成块?
是这样添加的:
UIViewController *rootVC = [UIApplication sharedApplication].delegate.window.rootViewController;
[rootVC addChildViewController:self];
[rootVC.view addSubview:self.view];
[self didMoveToParentViewController:rootVC];
【问题讨论】:
-
addChildViewController:实际上将该视图控制器推送到导航堆栈上。您必须在该块触发之前将其弹出 -
我在调用
dismiss...之前尝试了[composeViewController removeFromParentViewController];(我可以看到它已从rootViewController的childViewControllers属性中删除),但仍然没有调用完成块。 -
然后打开导航堆栈。
-
你为什么不使用 -presentViewController... 来展示它?解雇方法与此方法配对。或者手动完成所有操作。当你展示一个 VC 时,容器中设置了很多属性:presentingViewController、presentedViewController 等......如果你手动进行,你将不会让它们增值
-
@Andrea 我通常使用
-presentViewController...,但我使用的这个视图控制器来自外部源,所以我无法控制他们希望它如何呈现。
标签: ios objective-c cocoa-touch uiviewcontroller objective-c-blocks