Cocoa 如何从另一个视图动态修改子视图?

Cocoa 如何从另一个视图动态修改子视图?,cocoa,Cocoa,让我结合我正在使用的程序来解释我的问题。此程序由一个主窗口组成,该窗口具有NSOutlineView和NSTabView。NSTabViewItems(及其相应的子视图)在运行时动态添加(使用Cmd+T)。上述子视图是单独的XIB文件的一部分;子视图由各种简单的输入控件组成。正如我刚才所描述的,所有这些都有效 我希望NSOutlineView为它显示的各种项目提供上下文菜单,这些项目可能会操纵当前活动的NSTabViewItem子视图中的一些控件 我看到的最明显的方法是(这只是一个简化的示例,不

让我结合我正在使用的程序来解释我的问题。此程序由一个主窗口组成,该窗口具有NSOutlineView和NSTabView。NSTabViewItems(及其相应的子视图)在运行时动态添加(使用Cmd+T)。上述子视图是单独的XIB文件的一部分;子视图由各种简单的输入控件组成。正如我刚才所描述的,所有这些都有效

我希望NSOutlineView为它显示的各种项目提供上下文菜单,这些项目可能会操纵当前活动的NSTabViewItem子视图中的一些控件

我看到的最明显的方法是(这只是一个简化的示例,不是我的实际代码):

NSOutlineViewSubclass.h

@interface ... : NSOutlineView
    @property (weak) IBOutlet NSTabView *tabView;
@end
NSOutlineViewSubclass.m

@implementation ...
    @synthesize tabView;

    - (void)foo
    {
        NSTabViewItem *currentTab = [tabView selectedTabViewItem];
        TabViewSubView *tabViewSubView = [currentTab view];

        //
        //Manipulate subview controls here
        //
    }

@end
这似乎违反了MVC范式,因为我直接在视图中操作数据(在本例中为NSOutlineViewSubclass),而不是通过控制器。但是,就目前而言,我使用NSOutlineViewSubclassViewController的唯一时间是首先为新选项卡生成一个新视图。我的NSOutlineViewSubclass甚至不知道它是NSOutlineViewSubclassViewController。我是否错过了连接这两个方面的一步


谢谢

我错过了一件非常重要的事情!我没有利用我的XIB文件中非常重要的文件所有者。这使我能够在两个XIB之间链接,并包含一个视图控制器属性

我完全是从最上面的答案(类似地,是由asker Dale Dietrich写的)中找到答案的