gpt4 book ai didi

iphone - iOS:在没有访问其父 ViewController 的情况下关闭和呈现 ModalViewController

转载 作者:可可西里 更新时间:2023-11-01 03:38:18 24 4
gpt4 key购买 nike

背景:我想关闭之前展示的 modalView,并立即展示我刚刚关闭的带有新信息的相同 viewController

问题:如果没有指向以模态方式呈现第一个 ViewController 的父级 ViewController 的显式指针,我在这样做时并不是很成功。我正在尝试编写这样的类,它可以在不弄乱以前的 viewController 代码的情况下工作。

可能的线索:我一直在试验几件事:

1.) 尝试访问父 ViewController,目前我不知道如何访问。

2.) 一旦获得对父级的访问权限,我可以简单地应用以下代码:

UIViewController* toPresentViewController = [[UIViewController alloc] init];
[self dismissViewControllerAnimated:YES completion:^{
[parentViewControllerAccessor presentModalViewController:toPresentViewController animated:YES];
}];

理论上这应该可以访问父级 viewController。我对其他方式持开放态度。

假设:您无权更改父 ViewController 中的任何代码。

最佳答案

您的代码看起来应该可以工作。如果您使用的是 iOS 5,则有一个名为 presentingViewControllerUIViewController 属性。

@property(nonatomic, readonly) UIViewController *presentingViewController;

因此您可以使用此属性来获取呈现模态 Controller 的 View Controller 。

注意:在 iOS 4 中,parentViewController 将被设置为呈现 Controller ,因此如果您同时支持 iOS 4 和 5,则必须先检查操作系统版本决定访问哪个属性。在 iOS 5 中,Apple 已修复此问题,因此 parentViewController 现在专门用于包含的 View Controller 的父级(请参阅 中关于实现容器 View Controller 的部分UIViewController 文档)。

编辑:关于从 block 内访问 self.presentingViewController:在 block 被调用时(模态视图 Controller 关闭后)presentingViewController 属性可能会设置为 nil。请记住, block 内的 self.presentingViewController 会在执行 block 时而不是在创建时提供属性值。为防止出现这种情况,请执行以下操作:

UIViewController* toPresentViewController = [[UIViewController alloc] init];
UIViewController* presentingViewController = self.presentingViewController;
[self dismissViewControllerAnimated:YES completion:^
{
[presentingViewController presentModalViewController:toPresentViewController animated:YES];
}];

这是必要的,不是因为 self 已经消失/被关闭(它被 block 安全地保留),而是因为它不再呈现,因此它的 presentingViewController 现在是零。没有必要在其他任何地方存储 presentingViewController,局部变量很好,因为它会被 block 保留。

关于iphone - iOS:在没有访问其父 ViewController 的情况下关闭和呈现 ModalViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10987097/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com