如何访问呈现模态视图的 UIViewController 类/类名?

Posted

技术标签:

【中文标题】如何访问呈现模态视图的 UIViewController 类/类名?【英文标题】:How to Access the UIViewController class/className that presents a Modal View? 【发布时间】:2013-01-05 00:15:54 【问题描述】:

一个简单的问题

目前我呈现这样的模态视图:

+ (void)showModalController:(id)ContentController InViewController:(UIViewController*)vc withFrame:(CGRect)rect

UINavigationController *modalViewNavController = [[UINavigationController alloc] initWithRootViewController:ContentController];
modalViewNavController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
modalViewNavController.modalPresentationStyle = UIModalPresentationFormSheet;

[vc presentModalViewController:modalViewNavController animated:YES];

//it's important to do this after presentModalViewController
modalViewNavController.view.superview.frame = rect;

//self.view assumes the base view is doing the launching, if not you might need self.view.superview.center etc.
modalViewNavController.view.superview.center = vc.view.center;

[modalViewNavController release];

我以自定义模式大小传递将要呈现的 UIViewController 内容的值。我还将 UIViewController 的值传递给将显示它的模式。

就代码而言,如果可能的话,我想知道内容类中的“vc”名称。

编辑

假设我有 2 个类,其中一个称为 DetailViewController,其中将显示模式。另一个叫做 ModalContentViewController

我想知道 ModalContentViewController 类(当视图出现或加载时)DetailViewController 的名称。

有什么想法吗?

PD:目前正在使用...

XCode 4.4.1 iPad模拟器ios5.1 iOS5.1

【问题讨论】:

你能稍微整理一下你的问题吗?我很困惑您是获取内容控制器的名称还是呈现视图控制器的名称。此外,您应该考虑两个改进:将ContentController 声明为UIViewController * 而不是id。这样可以确保如果您尝试传递不是 UIViewController(子类)的内容,您将收到警告,这很好,因为 initWithRootVC 方法需要视图控制器。 其次,您可以考虑将此方法设置为UIViewController 上的类别,您可以通过转到文件> 新文件> obj-c 类别> UIViewController 上的类别来实现。然后,将此方法作为实例方法添加到UIViewController。这是一种更自然的编写方法的方式,而不是从 (InViewController:) 传入视图控制器来呈现它 谢谢 MaxGabriel,我会做出改变并阅读一些关于类别的内容 【参考方案1】:

查找UIViewController 属性presentingViewController。这是来自文档的引述:

如果收到此消息的视图控制器由 另一个视图控制器,此属性包含视图控制器 正在展示它。如果未显示视图控制器,但其中之一 它的祖先正在呈现,这个属性持有视图 控制器呈现最近的祖先。如果视图都没有 控制器及其任何祖先都被呈现,这个属性 保持零。

因此,您可以使用该属性来获取当前 VC 的名称。

【讨论】:

谢谢!有了祖先,我可以访问视图控制器了。【参考方案2】:

您可以使用NSStringFromClass(vc.class) 将类名作为NSString 获取。

【讨论】:

嗨 MaxGabriel,我知道如何访问类名,但我无法访问 ModalViewController 类(ModalView 的内容)中的 DetailViewController(它出现在哪里)。为了更清楚,我在问题上发布了一个示例。

以上是关于如何访问呈现模态视图的 UIViewController 类/类名?的主要内容,如果未能解决你的问题,请参考以下文章

如何关闭模态视图控制器,然后立即让呈现视图控制器呈现不同的模态视图控制器?

如何在模态呈现的视图控制器上执行呈现模态序列?

如何在MvvmCross中呈现iOS模态视图

如何从模态视图控制器调用呈现视图控制器的方法

如何从 UIPopoverController 呈现模态视图?

如何在所有其他视图之前以模态方式呈现“启动视图”?