Objective c (OSX/Cocoa)如何设置主窗口的控制器
我已经使用.xib文件创建了一个新的cocoa应用程序(不是故事板,该应用程序必须与mavericks/mountain lion向后兼容),我希望主窗口有一个自定义windowcontroller。这可能吗?我似乎找不到将窗口连接到所需自定义控制器的方法。该窗口在AppDelegate中有一个引用出口,但是我需要一个用于此窗口的自定义NSWindowController,因为它不会在应用程序启动时打开。应用程序作为菜单栏应用程序以静默方式启动,主应用程序通过菜单栏下拉菜单中的按钮按下启动 有没有办法将控制器链接到interface builder中的窗口?或者我必须按照以下思路做一些事情:Objective c (OSX/Cocoa)如何设置主窗口的控制器,objective-c,xcode,macos,cocoa,nswindowcontroller,Objective C,Xcode,Macos,Cocoa,Nswindowcontroller,我已经使用.xib文件创建了一个新的cocoa应用程序(不是故事板,该应用程序必须与mavericks/mountain lion向后兼容),我希望主窗口有一个自定义windowcontroller。这可能吗?我似乎找不到将窗口连接到所需自定义控制器的方法。该窗口在AppDelegate中有一个引用出口,但是我需要一个用于此窗口的自定义NSWindowController,因为它不会在应用程序启动时打开。应用程序作为菜单栏应用程序以静默方式启动,主应用程序通过菜单栏下拉菜单中的按钮按下启动 有没
wc = [[CustomWindowController alloc] initWithWindowNibName:@"Main"];
谢谢 创建控制器并使其从NSWindowController扩展。 在xib文件中,选择文件的所有者并将其设置为自定义类。 选择NSWindow并将其连接到文件的所有者 要打开窗口,请执行以下操作: 在您的.h中:
@property (strong, nonatomic) YourWindowController *yourWinController;
在您的.m中:
self.yourWinController = [[YourWindowController alloc] initWithWindowNibName:@"YourWindowController"];
[self.yourWinController showWindow: nil];
是的,在Interface Builder中打开
实用程序(右面板),并在底部单击对象库
(圆圈中有正方形)。
搜索对象
(蓝色立方体),并将其拖动到文档大纲
(interface builder左侧的面板)
从那里,选择刚刚创建的对象,并将标识检查器中的类更改为所需的窗口控制器
最后,您可以进入连接检查器
并将窗口
连接到窗口
出口
我似乎找不到办法将窗口连接到我想要的自定义窗口
控制器。但是,该窗口在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
- (void)launchWindow:(id)sender {
[self setWindowController:[[MainWindowController alloc]
initWithWindowNibName:@"MainWindowController"]];
[[self windowController] showWindow:nil];
}
4) 在AppDelegate.h中声明操作:
@interface AppDelegate : NSObject <NSApplicationDelegate>
-(IBAction)launchWindow:(id)sender;
@end
5) 在MainMenu.xib中,将菜单项连接到launchWindow()操作:控制从菜单项到AppDelegate对象的拖动,然后选择launchWindow。我不确定这是否适用于我的情况,因为我说的是使用空应用程序创建的“MainMenu.xib”。当前文件所有者的类型为NSApplication。将其设置为NSWindowController不会导致问题吗?您上面提到的是我为只包含窗口的.xib文件所做的工作。但是MainMenu.xib也包含其他对象。为什么不为您的窗口创建一个单独的xib?但是我可以,然后我必须复制菜单栏左上角显示的菜单等所有内容。我只需要一种简单的方法,从AppDelegate之外的某个按钮单击启动此主窗口。我想您无法在NSApplication(MainMenu.xib的文件所有者)和nib之间获取NSWindowController。这起作用,但不允许我按如下方式实例化窗口:mainAppController=[[Testcontroller alloc]initWithWindowNibName:@“MainMenu”];[mainAppController显示窗口:自我];我收到以下错误:无法将(委托)出口从(Testcontroller)连接到(AppDelegate):缺少setter或实例变量mainAppController是局部变量吗?根据你的代码片段,看起来是这样的。尝试创建如下属性(实例变量):@property Testcontroller*mainAppController
。然后使用self.mainAppController引用它。还将nil
作为参数传递给-showWindow
。最后,确保文件的所有者(应用程序代理)不再连接到窗口。单击文件的所有者,转到连接检查器并确保删除该连接这不会将窗口设置为main窗口