0

我通过以下代码将自定义视图添加到视图控制器

[bTVC addSubview:customView];

现在我想像这样在自定义视图的类中调用父视图控制器的实例方法

[self.parentViewController instanceMethod];

那可能吗 ?我怎样才能做到这一点 ?

4

2 回答 2

4

“正常”方法应该是实现一个指向您的父视图控制器的属性(不保留)委托,但您可能更喜欢使用这样的东西:

-(MyCustomUIViewController*)findParentUIViewControllerInSuperViews:(UIView*)myView {
    for (UIView* next = [myView superview]; next; next = next.superview) {
        UIResponder* nextResponder = [next nextResponder];
        if ([nextResponder isKindOfClass:[MyCustomUIViewController class]]) {
            return (MyCustomUIViewController*)nextResponder;
        }
    }
    return nil;
}

现在只需调用:

MyCustomUIViewController* myParentViewController = (MyCustomUIViewController*)[self findParentUIViewControllerInSuperViews:self];
[myParentViewController instanceMethod];

无论如何,我还建议您学习委托的工作原理,它在很多情况下都很有用,而且您迟早会需要它...

于 2013-01-29T09:53:51.373 回答
0

NSViewController 中没有 addSubview 方法。你可以在 NSView 中找到它。如果 bTVC 是 NSView 的一个实例(或其子类),您可以通过将 superview 发送给 self 来获得您所谓的父视图:[self superview] 或 self.superview。在您的示例中它将返回 bTVC。NSViewController 的工作方式不同,您可以在此处阅读完整文档

于 2013-01-29T09:28:05.503 回答