我有MainMenu.Xib,它有一个状态菜单元素。 MainMenu文件所有者映射到AppDelegate。
我还有另一个Xib是一个Window,它的文件所有者被映射到一个具有相同名称的ViewController。
所以我尝试了它有点工作是我在appDelegate中创建了一个动作,并使用First Responder将状态菜单中的菜单项映射到appDelete中的动作。
在我提出的行动中:
SubscriptionsViewController *vc = [[SubscriptionsViewController alloc] initWithNibName:@"Subscriptions" bundle:nil];
[vc view];
如果我单步执行代码,窗口会显示但随后会消失。所以我有两个问题
1)我认为有一种方法可以在不需要上述代码的情况下使用NSMenuItem加载xib。
2)如何让窗户立即关闭?我是否需要保存视图指针?
编辑:格式代码。
答案 0 :(得分:1)
1)我认为有一种方法可以在不需要上述代码的情况下使用NSMenuItem加载xib。
由于NSWindow不像iOS(UIWindow:UIView)那样从NSView继承,因此使用NSViewController从xib加载窗口是没有意义的。请改用NSObject的子类。
@interface SubscriptionsViewController : NSObject
@property (assign, nonatomic) IBOutlet NSWindow *window;
@end
@implementation SubscriptionsViewController
- (id)init
{
self = [super init];
if (self) {
[NSBundle loadNibNamed:@"Subscriptions" owner:self];
}
return self;
}
@end
2)如何让窗户立即关闭?我是否需要保存视图指针?
依赖于上下文来保留subscriptionsViewController的实例。您可以使用下面的代码显示一个窗口,其中窗口的实例是nib -
self.subscriptionsViewController = [[SubscriptionsViewController alloc] init];
[self.subscriptionsViewController.window makeKeyAndOrderFront:self];
请记住,如果在nib中设置了“Visible At Launch”,则在实例化subscriptionsViewController时窗口是可见的。
答案 1 :(得分:0)
您可以将窗口添加到MainMenu.xib中,而不是使用附加的xib文件,并在AppDelegare.h中创建一个插座
@property (assign) IBOutlet NSWindow *window;
然后您需要做的就是
window.isVisible = !window.isVisible;
采取必要的行动方法......