访问windowController的按钮来自subView

时间:2013-04-16 08:16:36

标签: objective-c macos cocoa

在我的cocoa OS X应用程序中,我有一个带有xib文件的 WindowController 两个 ViewControllers 使用xib文件,我在WindowController中添加了一个自定义视图,我通过在继续或下一个按钮中单击时删除并添加这些视图来交换这两个子视图。

[[theViewController view] removeFromSuperview];
self.theViewController = [[WelcomeInstallViewController alloc] initWithNibName:newView bundle:nil];
[innerInstallerView addSubview:[theViewController view]];
[[theViewController view] setFrame:[innerInstallerView bounds]];

现在在其中一个视图中我有一个按钮需要禁用WindowController中的继续按钮。我已经查看了 NSNotificationCenter ,这是我的第一个mac,cocoa,objective c app。我应该使用NSNotificationCenter吗?我很困惑,并没有正确理解。

enter image description here

2 个答案:

答案 0 :(得分:1)

有很多方法可以给猫皮肤涂抹......

最简单的方法是在NSWindowController添加一个插座,并将按钮链接到Interface Builder中的该插座,然后在您需要的任何条件下处理按钮启用。

通知是松散耦合应用程序组件的一种好方法,例如:如果窗口控制器没有启动状态更改,将触发按钮禁用/启用自身。

其他可能性包括NSUserInterfaceValidations,Cocoa中的专用机制(协议)..

允许用户界面元素(如菜单项或工具栏项)的目标决定是否应启用用户界面元素。

答案 1 :(得分:0)

鉴于类似的设计要求(多个可加载的XIB),我使用NSViewController范例允许逻辑附加到我加载到主视图中的子视图。在这种情况下,我将创建一个NSViewController子类,它具有bool属性(让我们称之为canContinue),我将从主视图的按钮绑定到所有者的subview.canContinue

如果这样做,主视图必须在引入每个子视图时加载视图控制器(将负责加载XIB),然后确保分配subview所有者中的属性指向您加载的NSViewController