有一种方法可以从
UIView
对象获取视图控制器引用吗?我需要像这样的东西:MyParentViewController *myParentViewController = [self.view.superview controller];
UIView
对象获取视图控制器引用吗?我需要像这样的东西:MyParentViewController *myParentViewController = [self.view.superview controller];
-nextResponder
方法来实现此操作。根据http://developer.apple.com/library/ios/documentation/uikit/reference/UIResponder_Class/Reference/Reference.html#//apple_ref/occ/instm/UIResponder/nextResponder,"如果 UIView 对象有关联的 UIViewController,则该方法将返回管理它的 UIViewController 对象;否则返回其 superview。"默认情况下,UIView没有对UIViewController的引用。您可以将其添加到您的UIView子类中,并在创建UIViewController中的UIView时进行设置。
如果您正在寻找viewcontroller的父级,则每个UIViewController都有属性parentViewController
,但是如果您想从UIView中访问它,则需要先到达您的UIViewController。
您可以查看如何在UIView子类中创建对UIViewController的引用以及如何/在何处设置它的示例,请参阅iPhone的视图控制器编程指南,请参见以编程方式创建视图中的定义自定义视图控制器类,这里是示例,有关更多详细信息,请参见链接的Metronome示例。
- (void)loadView {
self.wantsFullScreenLayout = YES;
MetronomeView *view = [[MetronomeView alloc]
initWithFrame:[UIScreen mainScreen].applicationFrame];
view.metronomeViewController = self;
self.view = view;
self.metronomeView = view;
[view release];
}
在标题中:
@interface MetronomeView : UIView {
MetronomeViewController *metronomeViewController;
...
标签
。[(MyParentViewController *)[[self.view superview] nextResponder] doSomething];
UIViewController* yourViewController =
(UIViewController*)[(YourAppDelegate*)
[[UIApplication sharedApplication] delegate] viewController];
你不应该保存对视图控制器的引用,因为它可能会动态地改变。每次需要时遍历响应者链。