(OSX / Cocoa)如何为主窗口

时间:2015-06-03 16:41:06

标签: objective-c xcode macos cocoa nswindowcontroller

我使用.xib文件创建了一个新的cocoa应用程序(不是故事板,应用程序必须向后兼容小牛/山狮)我希望有一个自定义窗口控制器用于主窗口。这可能吗?我似乎无法找到一种方法将窗口连接到我想要的自定义控制器。该窗口在AppDelegate中有一个参考插座,但是我需要一个自定义的NSWindowController用于此窗口,因为它在应用程序启动时不会打开。该应用程序以菜单栏应用程序的形式静默启动,主应用程序通过菜单栏下拉按钮启动。

有没有办法将控制器链接到界面构建器中的窗口?或者我必须做一些事情:

 wc = [[CustomWindowController alloc] initWithWindowNibName:@"Main"];

谢谢!

3 个答案:

答案 0 :(得分:2)

是的,在界面生成器中打开Utilities(右侧面板),然后在底部点击Object Library(包含正方形的圆圈)。
搜索Object(蓝色立方体),然后将其拖到Document Outline(界面构建器左侧面板)中 从那里,选择刚刚创建的对象,并将Class中的Identity Inspector更改为您想要的窗口控制器。

最后,您可以进入Connections Inspector并将windowwindow商店相关联

答案 1 :(得分:2)

  

我似乎找不到将窗口连接到我想要的自定义的方法   控制器。然而,窗口在AppDelegate中有一个参考插座   我需要为这个窗口定制一个NSWindowController,因为它没有打开   在应用程序启动时。

另一种方式:

1)删除MainMenu.xib中的窗口。删除AppDelegate.m中的窗口属性 - 因为您删除了窗口,它不再相关。

2)文件>新>文件> Cocoa类。输入班级名称,例如MainWindowController;选择“子类:NSWindowController”;选中“还为用户界面创建.xib文件”。

3)在AppDelegate.m中创建一个插座:

#import "AppDelegate.h"
#import "MainWindowController.h"

@interface AppDelegate ()

@property (strong, nonatomic) MainWindowController* windowController;

@end

4)在AppDelegate.h中声明一个动作:

@interface AppDelegate : NSObject <NSApplicationDelegate>

-(IBAction)launchWindow:(id)sender;

@end

并在AppDelegate.m中实现:

- (void)launchWindow:(id)sender {
    [self setWindowController:[[MainWindowController alloc]
                               initWithWindowNibName:@"MainWindowController"]];

    [[self windowController] showWindow:nil];
}

5)在MainMenu.xib中,将菜单项连接到launchWindow()动作:控制从菜单项拖动到AppDelegate对象并选择launchWindow。

答案 2 :(得分:0)

创建控制器并使其从NSWindowController扩展。 在您的xib文件中,选择文件所有者并将其设置为您的自定义类。 选择您的NSWindow并将其连接到文件所有者。

打开窗口:

在你的.h:

@property (strong, nonatomic) YourWindowController *yourWinController;

在你的.m:

self.yourWinController = [[YourWindowController alloc] initWithWindowNibName:@"YourWindowController"];
[self.yourWinController showWindow: nil];