我有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/

10-12 05:11
查看更多