Objective c 1个控制器,用于多个NSWindows
我有一个应用程序,它有多个Objective c 1个控制器,用于多个NSWindows,objective-c,xcode,macos,cocoa,Objective C,Xcode,Macos,Cocoa,我有一个应用程序,它有多个NSWindows。我想用一个NSWindowController来控制它们。这可能吗?如果是这样,我如何使用多个NSWindow NIB初始化控制器?NSWindowController被设计为拥有一个NSWindow(在_window属性中),因此您的设计目标是对抗框架。更好的办法是为每个窗口分别设置一个NSWindowController,然后编写一个主控制器类来拥有和管理窗口控制器集群。虽然从架构上讲这不是一个好主意,但它是可以实现的。为此,您需要为需要管理的窗
NSWindow
s。我想用一个NSWindowController
来控制它们。这可能吗?如果是这样,我如何使用多个NSWindow NIB初始化控制器?NSWindowController被设计为拥有一个NSWindow(在_window属性中),因此您的设计目标是对抗框架。更好的办法是为每个窗口分别设置一个NSWindowController,然后编写一个主控制器类来拥有和管理窗口控制器集群。虽然从架构上讲这不是一个好主意,但它是可以实现的。为此,您需要为需要管理的窗口使用单独的插座,并且您可以使用将多个NIB加载到同一个NSWindowController中(只需确保没有冲突的插座)。您可以使用一个NSWindowController子类,该子类包含多个窗口所需的功能,但是对于每个窗口,您需要该控制器的一个单独的实例
您通常会使用应用程序委托或其他一些常规控制器类来打开多个窗口,并根据需要实例化窗口控制器。例如:
- (IBAction)showFirstWindow:(id)sender {
if (!self.firstWindowController) {
NSStoryboard *storyboard = [NSStoryboard storyboardWithName:@"MyStoryboard" bundle:nil];
self.firstWindowController = [storyboard instantiateControllerWithIdentifier:@"OneWindow"];
// initialize any variables for the window controller
}
[self.firstWindowController showWindow:self];
}
- (IBAction)showSecondWindow:(id)sender {
if (!self.secondWindowController) {
NSStoryboard *storyboard = [NSStoryboard storyboardWithName:@"MyStoryboard" bundle:nil];
self.secondWindowController = [storyboard instantiateControllerWithIdentifier:@"OneOrAnotherWindow"];
// initialize any variables for the window controller
}
[self.secondWindowController showWindow:self];
}
请注意,您可以对第二个窗口重复使用故事板中的同一窗口控制器,也可以使用故事板中具有另一标识符的不同窗口控制器,它们都共享您的单个自定义子类;只需在序列图像板检查器的“自定义类”面板中指定您的类,而不是NSWindowController