【问题标题】:call parent ViewController instance method调用父 ViewController 实例方法
【发布时间】:2013-01-29 09:11:07
【问题描述】:

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

[bTVC addSubview:customView];

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

[self.parentViewController instanceMethod];

这可能吗?我该怎么做?

【问题讨论】:

  • 创建一个父视图的对象并用它来调用它的方法
  • 但这意味着创建一个新对象.. 我不能使用已添加自定义视图的 ViewController 的现有对象吗??

标签: iphone objective-c


【解决方案1】:

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

-(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];

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 对不起,我正在使用 UIViewController 和 UIView
    猜你喜欢
    • 2013-11-03
    • 1970-01-01
    • 1970-01-01
    • 2021-08-28
    • 1970-01-01
    • 2016-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多