我有MainMenu.Xib,其中有一个状态菜单元素。 MainMenu文件所有者已映射到AppDelegate。
我还有另一个Xib,它是一个Window,它的File Owner映射到同名的ViewController。
因此,我尝试过的工作是在appDelegate中创建了一个动作,并使用“第一响应者”将状态菜单中的菜单项映射到了appDelete中的动作。
在我的动作中:
SubscriptionsViewController *vc = [[SubscriptionsViewController alloc] initWithNibName:@"Subscriptions" bundle:nil];
[vc view];
如果我单步执行代码,则会显示窗口,但随后消失。所以我有两个问题
1)我认为有一种方法可以用NSMenuItem加载xib,而无需上面的代码。
2)如何防止窗口立即关闭?我需要保存视图指针或其他东西吗?
编辑:格式化代码。
最佳答案
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];
请记住,如果在笔尖中设置了“启动时可见”,则在实例化subscriptionsViewController时该窗口将可见。
关于objective-c - 从状态菜单加载Xib窗口,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19485093/