Как открыть новое окно при нажатии кнопки в приложении Cocoa Mac? - PullRequest
33 голосов
/ 05 апреля 2011

Я хочу знать, как открыть новое окно при нажатии кнопки в Cocoa Mac Programming.Помоги мне.Я делаю Mac-приложение, которое должно открывать новое окно Mac при нажатии определенной кнопки.

Ответы [ 4 ]

44 голосов
/ 05 апреля 2011

Если вы хотите создать отдельный класс для New Window, это шаги:

  1. Создайте класс, который является подклассом NSWindowController, например NewWindowController
  2. Создайте xib окна для класса NewWindowController.
  3. При нажатии кнопки код как:

    NewWindowController *windowController = [[NewWindowController alloc] initWithWindowNibName:@"You Window XIB Name"];
    [windowController showWindow:self];
    
12 голосов
/ 05 апреля 2011
NSWindowController * wc=[[NSWindowController alloc] initWithWindowNibName:@"your_nib_name"];
[wc showWindow:self];
10 голосов
/ 14 июня 2017

Swift 3 : в раскадровке перейдите в WindowController -> Инспектор идентификации -> storyBoardID: заполните: mainWindow. Затем из вашего текущего viewcontroller свяжите кнопку на раскадровке со следующим методом:

@IBAction func newWindow(_ sender: Any) {
    let myWindowController = self.storyboard!.instantiateController(withIdentifier: "mainWindow") as! NSWindowController
    myWindowController.showWindow(self)
}
7 голосов
/ 03 сентября 2013
  1. Создать класс, который является подклассом NSWindowController, например NewWindowController
  2. Создайте xib окна для класса NewWindowController.
  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];
    }
...
...