2014-11-01 2 views
18

Я создал приложение Cocoa в Xcode6, которое использует раскадровки. В качестве шаблона Xcode предоставляет окно для приложения. Я хочу добавить второе окно, чтобы показать, когда программа загружена впервые. Таким образом, в основном появятся два окна.Инициализация другого окна с помощью раскадровки для OS X

Я установил оконный контроллер на Main.storyboard, где также находится первое окно. Тем не менее, я не мог найти способ показать это второе окно при запуске программы. Не могли бы вы помочь?

спасибо.

ответ

33

В вашей раскадровке выберите свой второй контроллер окон. В инспекторе идентичности, укажите имя этого окна контроллера, например secondWindowController

Затем в делегат своего приложения, установите свойство для контроллера окна:

@property NSWindowController *myController; 

В вашем applicationDidFinishLaunching: реализация методы, создать ссылка на раскадровку. Таким образом вы получаете доступ к вашему оконному контроллеру из раскадровки. После этого осталось только отобразить окно, отправив вашему оконному контроллеру метод showWindow :.

#import "AppDelegate.h" 

@interface AppDelegate() 

@end 

@implementation AppDelegate 
@synthesize myController; 

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification { 
NSStoryboard *storyBoard = [NSStoryboard storyboardWithName:@"Main" bundle:nil]; // get a reference to the storyboard 
myController = [storyBoard instantiateControllerWithIdentifier:@"secondWindowController"]; // instantiate your window controller 
[myController showWindow:self]; // show the window 
} 

@end 
+1

Спасибо! Мне также пришлось установить «Искатель раскадровки» на «Main», и он сработал. – Hakan

+0

'' '[storyBoard instantiateInitialController]' '' можно использовать для обхода проблемы с идентификатором (пока вы установите нужное окно в качестве начального контроллера представления в файле раскадровки). – Supertecnoboff

4

Swift 3 версия:

var myWindowController: NSWindowController! 

override init() { 
    super.init() 

    let mainStoryboard = NSStoryboard.init(name: "Main", bundle: nil) 
    myWindowController = mainStoryboard.instantiateController(withIdentifier: "myWindowControllerStoryboardIdentifier") as! NSWindowController 
    myWindowController.showWindow(self) 
} 

Убедитесь, что вы определить myWindowController вне функции, иначе окно не будет отображаться.

Это действительно лучше сделать это в init() (AppDelegate), как вам может понадобиться раньше. версия

1

быстры 4:

var monitorcontroler: NSWindowController! 

override init() { 
    super.init() 

    let mainStoryboard = NSStoryboard.init(name: NSStoryboard.Name(rawValue: "Main"), bundle: nil) 
    monitorcontroler = mainStoryboard.instantiateController(withIdentifier: NSStoryboard.SceneIdentifier(rawValue: "moniteur")) as! NSWindowController 
    monitorcontroler.showWindow(self) 
} 
Смежные вопросы