从自定义转换中引用presentingViewController
Posted
技术标签:
【中文标题】从自定义转换中引用presentingViewController【英文标题】:Reference to presentingViewController from custom transition 【发布时间】:2014-01-14 21:53:22 【问题描述】:我已经设置了一个自定义转换,即设置similar to this tutorial here。
我现在要做的是更新(下方)UIViewController
上的 BOOL。这是将控制器显示在顶部的控制器。
我如何获得以下控制器的访问权限/指针?我试过 self.presentingViewController 但这指向UINavigationController
。
自定义过渡信息
底部控制器是UIViewControllerTransitioningDelegate
。控制器通过 segue 链接。以下在prepareForSegue
:
self.animationController = [[MESGuessGameTurnZoomAnimation alloc] init];
UIViewController *destVC = segue.destinationViewController;
destVC.transitioningDelegate = self;
当目标视图控制器出现时,用户可以单击返回,它只需运行以下(目前)返回到原始视图控制器:
[self dismissViewControllerAnimated:YES completion:nil];
【问题讨论】:
【参考方案1】:听起来您正试图将数据从presentingVC 传递回presentingVC。如果是这种情况,无论您是否使用新的 ios 7 自定义动画过渡,方法都是相同的。
您有 2 个选项,如果您使用标准过渡或自定义过渡,则同样如此。
单击返回时使用委托模式。这样presentingVC调用dismiss并可以访问presentingVC及其任何属性。
How do I set up a simple delegate to communicate between two view controllers?
使用展开转场。这完成了同样的事情,但使用故事板。 https://developer.apple.com/library/ios/technotes/tn2298/_index.html
您可以使用transitioningContext
在prepareForSegue:
和animationController 的animateTransition:
方法中访问两个视图控制器,但我认为您只是在谈论传回数据,这可以使用上述方法之一来完成。
【讨论】:
谢谢,你能不能只为 push segue 创建一个 unwind segue?我的是一个带有自定义过渡的模型,但是在故事板中将一个按钮拖到 Exit 并没有做任何事情 你必须首先在你的展示VC中创建展开方法。然后它会在您拖动退出时显示。签名是-(IBAction)unwindToViewController:(UIStoryboardSegue *)sender
。通常,展开 segue 会为您解散,但使用自定义转换则不会,因此您需要在 unwind 方法中调用解散。我在 WWDC Session 218 的示例代码中做了这件事:github.com/soleares/SOLPresentingFun。单击“选项”,这是一个带有展开转场的模型自定义过渡。 unwind sequ 方法在 SOLViewController.m 的末尾。
@Jesse- 谢谢你。当您说“通常展开转场会为您解散,但使用自定义转换时不会”......我发现我不必调用 self dismissViewController...
只需让展开转场完成所需的移动。事实上,通过包含 dismissViewController
方法,我会收到关于在另一个动画制作时解雇的警告?
如果你不需要,那么你就准备好了。我发现当我在关闭时使用自定义动画转换进行模态关闭时,我需要在展开操作中手动调用dismissViewController 来启动关闭转换。
谢谢杰西 - 我会接受答案。我还有另一个问题***.com/questions/21142700/… - 我相信这与过渡委托不是 nil 和控制器没有被释放有关,如果你也知道的话。谢谢以上是关于从自定义转换中引用presentingViewController的主要内容,如果未能解决你的问题,请参考以下文章