如何通过代码从UIView获取UIViewController

rei*_*man 9 iphone cocoa-touch objective-c uiviewcontroller uiview

有一种方法可以从UIView对象获取视图控制器引用吗?我需要这样的东西:

MyParentViewController *myParentViewController = [self.view.superview controller];
Run Code Online (Sandbox Code Playgroud)

use*_*008 16

您可以使用该-nextResponder方法执行此操作.根据http://developer.apple.com/library/ios/documentation/uikit/reference/UIResponder_Class/Reference/Reference.html#//apple_ref/occ/instm/UIResponder/nextResponder,"UIView通过返回实现此方法管理它的UIViewController对象(如果有的话)或超级视图(如果没有)

  • 这是一个很好的解决方法,但视图永远不需要直接访问其控制器.这就是为什么我们有代表. (4认同)

ste*_*anB 5

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];
}
Run Code Online (Sandbox Code Playgroud)

在标题中:

@interface MetronomeView : UIView {
    MetronomeViewController *metronomeViewController;
...
Run Code Online (Sandbox Code Playgroud)