gpt4 book ai didi

objective-c - 从状态菜单加载 xib 窗口

转载 作者:行者123 更新时间:2023-12-03 17:53:11 30 4
gpt4 key购买 nike

我有 MainMenu.Xib,它有一个状态菜单元素。 MainMenu 文件所有者映射到 AppDelegate。

我还有另一个 Xib,它是一个窗口,它的文件所有者映射到同名的 ViewController。

所以我尝试过并且有效的是我在 appDelegate 中创建了一个操作,并使用第一响应程序将状态菜单中的菜单项映射到 appDelete 中的操作。

在我所采取的行动中:

SubscriptionsViewController *vc = [[SubscriptionsViewController alloc] initWithNibName:@"Subscriptions" bundle:nil];
[vc view];

如果我单步执行代码,窗口会显示,但随后就会消失。所以我有两个问题

1) 我认为有一种方法可以使用 NSMenuItem 加载 xib,而不需要上面的代码。

2) 如何防止窗口立即关闭?我需要保存 View 指针什么的吗?

编辑:格式化代码。

最佳答案

1) I thought there was a way to load the xib with NSMenuItem without the need of the above code.

由于 NSWindow 不像 iOS 中那样继承自 NSView (UIWindow:UIView),因此使用 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) How do I keep the window from closing right away? Do I need to save the view pointer or something?

  • 是否保留subscriptionsViewController的实例取决于上下文。您可以使用下面的代码来显示一个窗口,其中窗口的实例位于 nib 中 -

       self.subscriptionsViewController = [[SubscriptionsViewController alloc] init];
    [self.subscriptionsViewController.window makeKeyAndOrderFront:self];

请记住,如果在 nib 中设置了“启动时可见”,那么当您实例化 subscriptionsViewController 时,窗口将可见。

关于objective-c - 从状态菜单加载 xib 窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19485093/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com