2015-01-17 3 views
10

Я создаю приложение состояния OS X, поэтому Я хочу, чтобы приложение запустило скрытый.Как скрыть начальное окно при запуске с раскадровки OS X

Я создал приложение «раскадровки», и начальное окно всегда отображается, даже если «Видимый при запуске» не установлен (по умолчанию он не отмечен).


Примечание: если отключить «ли первоначальный контроллер», то приложение корректно запускается без любого окна, но мой (теперь сирота) окно, кажется, никогда не будет добавлен в раскадровке:

var mainWindow = NSStoryboard(name: "Main", bundle: nil)?.instantiateControllerWithIdentifier("mainWindow") 

Контроллер «mainWindow» не найден (хотя я правильно установил «Идентификатор раскадровки» на контроллере окна).

Так что я думаю, что лучше оставить «ли первоначальный контроллер», но просто главное окно спрятанный в самом начале ...

+1

Простите меня за ответ на вопрос более 1 года назад, но окно можно создать из раскадровки, даже если вы не зададите его как * контроллер начального представления *. Возможно, вы не держите экземпляр окна или окна контроллера, я думаю. – Blaszard

ответ

10

Это может быть немного рубить, но вы можете сделать это

func applicationDidFinishLaunching(notification: NSNotification) { 
    // Insert code here to initialize your application 
    NSApplication.sharedApplication().windows.last!.close() 
} 

А потом на ...

NSApplication.sharedApplication().windows.last!.makeKeyAndOrderFront(nil) 
NSApplication.sharedApplication().activateIgnoringOtherApps(true) 
+1

Это сработало для меня, но я должен был показать окно внутри блока операций, потому что он вообще не отображался. OperationQueue.main.addOperation {?. окно .makeKeyAndOrderFront (ноль) NSApplication.shared() активировать (ignoringOtherApps: истина) } – Chuy47

+0

почему компания Apple делает вещи трудно. Это вопрос проверки одной коробки с XIBS. Спасибо, яблоко. – SpaceDog

25

Снимают "Is Initial Controller" окно на раскадровке, выходя из приложения остроумие hout - начальный контроллер. Ваше приложение будет запущено, но не будет окна.

screenshot

+1

Любые идеи о том, как отображать окно в этом случае? См. Http://stackoverflow.com/questions/31166779/opening-a-window-for-status-bar-os-x-10-10-application –

+1

Используйте это решение вместо взлома выше, спасибо Tim – leonarth

6

Снимите флажок «Является ли Initial Controller», но тогда вам нужно установить раскадровку и связанный с ним NSWindowController вручную.

Точный способ сделать это показано in this answer, который я цитирую здесь:

[...] в AppDelegate, настроить свойство для контроллера окна:

@property NSWindowController *myController; 

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

#import "AppDelegate.h" 

@interface AppDelegate() 
@end 

@implementation AppDelegate 

@synthesize myController; 

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

@end 
0

Способ сделать это так же, как вы пробовали:

let storyboard = NSStoryboard(name: "Main", bundle: nil) 
guard let mainWC = storyboard.instantiateControllerWithIdentifier("MainWindowController") as? MainWindowController else { 
    fatalError("Error getting main window controller") 
} 
// optionally store the reference here 
self.mainWindowController = mainWC 

mainWC.window?.makeKeyAndOrderFront(nil) // or use `.showWindow(self)` 

Единственное, что вы, вероятно, забыл было снимите флажок «Release при закрытии». Это немедленно освободит окно и не позволит механизму загрузки раскадровки найти его, даже если у вас есть правильный идентификатор.

Смежные вопросы