【发布时间】:2011-01-22 23:11:23
【问题描述】:
有办法从UIView 对象中获取视图控制器引用吗?我需要这样的东西:
MyParentViewController *myParentViewController = [self.view.superview controller];
【问题讨论】:
标签: iphone objective-c cocoa-touch uiview uiviewcontroller
有办法从UIView 对象中获取视图控制器引用吗?我需要这样的东西:
MyParentViewController *myParentViewController = [self.view.superview controller];
【问题讨论】:
标签: iphone objective-c cocoa-touch uiview uiviewcontroller
UIView默认没有对UIViewController的引用。你可以将它添加到你的UIView子类中,并在你在UIViewController中创建UIView时设置它。
如果您正在寻找 viewcontroller 的父级,每个 UIViewController 都有属性 parentViewController,但如果您想从 UIView 访问它,您需要先访问您的 UIViewController。
您可以查看示例如何在 UIView 的子类中创建对 UIViewController 的引用以及如何/在哪里设置它 View Controller Programming guide for iPhone,请参阅定义中的以编程方式创建视图部分一个自定义视图控制器类,这里是示例,更多详细信息请参见链接的节拍器示例。
- (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;
...
【讨论】:
您可以使用-nextResponder 方法来执行此操作。根据http://developer.apple.com/library/ios/documentation/uikit/reference/UIResponder_Class/Reference/Reference.html#//apple_ref/occ/instm/UIResponder/nextResponder,“UIView 通过返回管理它的 UIViewController 对象(如果有)或其父视图(如果没有)来实现此方法”
【讨论】:
您不应该保存对视图控制器的引用,因为它可能会动态变化。 每次需要时遍历响应者链。
【讨论】:
你可以使用
[(MyParentViewController *)[[self.view superview] nextResponder] doSomething];
【讨论】:
您可以使用以下内容:
UIViewController* yourViewController =
(UIViewController*)[(YourAppDelegate*)
[[UIApplication sharedApplication] delegate] viewController];
【讨论】: