如何从其他视图动态修改子视图?

时间:2013-09-14 21:45:35

标签: cocoa

让我在与我合作的计划中解释我的问题。该程序由一个主窗口组成,该窗口具有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。在连接这两个时,我是否错过了一步?

谢谢!

1 个答案:

答案 0 :(得分:0)

我遗漏了一些非常重要的东西!我没有在我的XIB文件中利用非常重要的文件所有者。这使我能够在两个XIB之间进行链接并包含View Controller属性。

我的答案完全取自最高的答案here(同样地,由其提问者Dale Dietrich撰写)。