【问题标题】:How to open a new window on button click in Cocoa Mac Application?如何在 Cocoa Mac 应用程序中单击按钮打开一个新窗口?
【发布时间】:2011-07-29 16:44:47
【问题描述】:

我想知道如何在 Cocoa Mac Programming 中单击按钮打开一个新窗口。帮我。我正在做一个 mac 应用程序,它需要在特定按钮单击时打开一个新的 mac 窗口。

【问题讨论】:

    标签: cocoa macos xib


    【解决方案1】:

    Swift 3:在故事板中转到 WindowController -> 身份检查器 -> storyBoardID:填写:mainWindow。 然后从您当前的视图控制器将故事板上的按钮链接到以下方法:

    @IBAction func newWindow(_ sender: Any) {
        let myWindowController = self.storyboard!.instantiateController(withIdentifier: "mainWindow") as! NSWindowController
        myWindowController.showWindow(self)
    }
    

    【讨论】:

      【解决方案2】:

      如果你想为新窗口创建一个单独的类,这些是步骤:

      1. 创建一个类,它是 NSWindowController 的子类,例如新窗口控制器
      2. 为 NewWindowController 类创建一个窗口 xib。
      3. 按钮点击代码为:

        NewWindowController *windowController = [[NewWindowController alloc] initWithWindowNibName:@"You Window XIB Name"];
        [windowController showWindow:self];
        

      【讨论】:

      • 谢谢...效果很好... :) 你解释得很好...谢谢...我找了几天,现在效果很好... :)
      • 我尝试过同样的事情,但我遇到的问题是新窗口在显示后立即关闭。我那里没有任何代码,所以我看不到我做错了什么。有什么想法吗?
      • @Interfector 我也有同样的问题..你解决了吗?
      • 不:|我迟早会弄清楚的,我会在这里发布解决方案。
      • @Interfector:您的窗口立即关闭的原因可能是由于 ARC。如果您没有将窗口控制器分配给强保留变量,它将在函数结束后立即释放。
      【解决方案3】:
      1. 创建一个类,它是 NSWindowController 的子类,例如新窗口控制器
      2. 为 NewWindowController 类创建一个窗口 xib。
      3. 按钮点击代码为:

        NewWindowController *controllerWindow = [[NewWindowController alloc] initWithWindowNibName:@"You Window XIB Name"]; [controllerWindow showWindow:self];

      是的,但是如果此代码在某个函数内,则窗口会关闭。 这是解决方案。

      blah.h

      @interface blah : NSObject {
           ...
           NewWindowController *controllerWindow;
           ...
      }
      

      blah.m

      @implementation
      ...
         -(IBAction)openNewWindow:(id)sender {
             controllerWindow = [[NewWindowController alloc] initWithWindowNibName:@"You Window XIB Name"];
             [controllerWindow showWindow:self];
          }
      ...
      

      【讨论】:

      • 最好在现有答案中添加评论(如果可以的话),而不是引用它、回复然后发布自己的答案。
      • @AdrianWragg,是的,我是新手,所以我很抱歉。
      • 嗯...我怎样才能关闭前一个?此代码使两个窗口同时打开。
      • 这个问题是不能同时打开同一个窗口类的多个实例。例如,假设您有一个文本编辑器应用程序,并且您想一次查看多个文本文件。使用这种方法,一旦你打开一个新的文本文件,旧的窗口就会立即消失,因为你正在用一个新的窗口控制器实例覆盖当前的窗口控制器实例。
      【解决方案4】:
      NSWindowController * wc=[[NSWindowController alloc] initWithWindowNibName:@"your_nib_name"];
      [wc showWindow:self];
      

      【讨论】:

      • @Saurabh-哇!非常感谢!成功了...谢谢...我是stackoverflow的新手,令人印象深刻... :)
      • 实际上我在过去几天一直在寻找相同的东西! :) 我尝试了不同但没有继承 NSWindowController !!!
      • 为什么子分类答案的评价比这个高?肯定不是子类化是一个更简单、更优雅的答案?
      • 在这里使用未声明的标识符'self',在main.m中使用这个
      猜你喜欢
      • 2013-10-08
      • 1970-01-01
      • 1970-01-01
      • 2019-04-12
      • 2011-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-14
      相关资源
      最近更新 更多