如何访问呈现模态视图的 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 类/类名?的主要内容,如果未能解决你的问题,请参考以下文章
如何关闭模态视图控制器,然后立即让呈现视图控制器呈现不同的模态视图控制器?