我对XCode / Objective-C / Cocoa很陌生。我想为我的应用实现一个设置窗口。
我有一个MainMenu.xib
,它也拥有我的主窗口。从菜单中,我想打开一个设置窗口。我创建了Settings.xib
和相应的.h
和.m
文件来保存该窗口的功能。
Settings.h:
#import <Cocoa/Cocoa.h>
@interface Settings : NSWindowController <NSApplicationDelegate>
-(IBAction)openSettings:(id)senderId;
@property (nonatomic, retain) Settings *thisWindow;
@end
Settings.m:
#import "Settings.h"
@implementation Settings
- (void)windowDidLoad {
[super windowDidLoad];
// Implement this method to handle any initialization after your window controller's window has been loaded from its nib file.
}
// open preferences window
- (IBAction)openSettings:(id)senderId
{
_thisWindow = [[Settings alloc] initWithWindowNibName:@"Settings"];
[_thisWindow showWindow:self];
}
@end
我将Preferences
菜单项拖到第一响应者,然后从那里选择openSettings:
。
但是,该项目仍处于停用状态,我非常确定,因为我没有做任何事情将Settings
界面链接到MainMenu.xib
,AppDelegate.h/m
与{{1}}一起使用。
如何使这项工作?我发现的所有其他解决方案对我来说都没有用。
答案 0 :(得分:0)
如果我明白你想要将MainMenu和MainWindowController存储在两个单独的类中。
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
方法中创建主窗口控制器类的实例,显示窗口使用以下代码
MainWindowController *controller=[[MainWindowController alloc] initWithNibName:@"MainWindowController"];
[controller showWindow:nil];
[controller.window makeKeyAndOrderFront:nil];
在这里。
答案 1 :(得分:0)
好的,在你的mainwindowcontroller中,声明一个类型为NSWindowController * settingsWindow的属性。使用相应的xib初始化它。
然后创建一个名为-(void)openSettings
的方法,其中一行[self.settingsWindow showWindow:self];
然后在你的mainWindowController初始化中,初始化一个NSMenuItem,并将它的动作设置为openSettings。然后将NSMenuItem添加到您想要以编程方式进行的Mainmenu,例如
//mainMenu is your application's menu-- if you switched index to 1 it would be the 'File' menu
NSMenu *mainMenu = [[[NSApp mainMenu] itemAtIndex:0] submenu];
[mainMenu insertItem:newItem atIndex:4];
答案 2 :(得分:0)
我最终使用AppDeleate.m
来打开对话框。我将菜单按钮链接到界面构建器中的AppDelegate对象,并使用openSettings:
。这是它的外观:
// open preferences window
- (IBAction)openSettings:(id)senderId
{
_settingsWindow = [[Settings alloc] initWithWindowNibName:@"Settings"];
[_settingsWindow showWindow:self];
}
在AppDelegate.m
中,而不是Settings.m
。