我使用.xib文件创建了一个新的cocoa应用程序(不是故事板,应用程序必须向后兼容小牛/山狮)我希望有一个自定义窗口控制器用于主窗口。这可能吗?我似乎无法找到一种方法将窗口连接到我想要的自定义控制器。该窗口在AppDelegate中有一个参考插座,但是我需要一个自定义的NSWindowController用于此窗口,因为它在应用程序启动时不会打开。该应用程序以菜单栏应用程序的形式静默启动,主应用程序通过菜单栏下拉按钮启动。
有没有办法将控制器链接到界面构建器中的窗口?或者我必须做一些事情:
wc = [[CustomWindowController alloc] initWithWindowNibName:@"Main"];
谢谢!
答案 0 :(得分:2)
是的,在界面生成器中打开Utilities
(右侧面板),然后在底部点击Object Library
(包含正方形的圆圈)。
搜索Object
(蓝色立方体),然后将其拖到Document Outline
(界面构建器左侧面板)中
从那里,选择刚刚创建的对象,并将Class
中的Identity Inspector
更改为您想要的窗口控制器。
最后,您可以进入Connections Inspector
并将window
与window
商店相关联
答案 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];