2015-01-17 19 views
10

Bir OS X durum çubuğu uygulaması oluşturuyorum, bu yüzden Uygulamanın gizli'u başlatmasını istiyorum.OS X storyboard'ları ile başlangıç ​​penceresini nasıl gizleyebilirim

Bir "storyboard" uygulaması oluşturdum ve "Başlatılırken görünür" seçeneği işaretlenmemiş olsa da (varsayılan olarak işaretlenmemiş olsa bile) ilk pencere her zaman görünür.


Not: Ben devre dışı bırakırsanız "ilk kontrolör mi" o zaman Uygulama doğru herhangi bir pencere olmadan başlar, ancak benim (şimdi yetim) pencere film şeridine eklenecektir asla görünüyor:

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

"mainWindow" denetleyicisi bulunamadı (Pencere Denetleyicisine "Storyboard Kimliği" ni doğru şekilde ayarladığım halde).

yüzden

+1

1 yıldan daha uzun bir süredir bu soruyu yanıtladığınız için beni bağışlayın, ancak * başlangıç ​​görünümü denetleyicisi * olarak ayarlamamış olsanız bile, pencere storyboard'dan başlatılabilir. Belki de pencereyi veya pencere denetleyici örneğini tutmazsınız sanırım. – Blaszard

cevap

10

Bu hack biraz olabilir ... "ilk kontrolör mi" ama sadece başında gizli ana pencere var bırakmak daha iyi olduğunu düşünüyorum, ama bu

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

Ve daha sonra da ...

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

Bu benim için çalıştı, ancak hiç gösterilmediğinden pencereyi bir Operasyon bloğu içinde göstermek zorunda kaldım. Elma şeyler zorlaştırır neden – Chuy47

+0

: OperationQueue.main.addOperation { ?. pencere .makeKeyAndOrderFront (nil) NSApplication.shared() (true ignoringOtherApps) aktive}. XIBS ile bir kutuyu kontrol etme meselesiydi. Teşekkürler elma. – SpaceDog

25

işaretini kaldırın film şeridinde kutu uygulama zekâ bırakarak "İlk Kontrolör mı" bir ilk denetleyiciyi havaya uçurmak. Uygulamanız çalışacak, ancak pencere olmayacak.

screenshot

+1

Bu durumda bir pencerenin nasıl görüntüleneceği hakkında herhangi bir fikrin var mı? Http://stackoverflow.com/questions/31166779/opening-a-window-for-status-bar-os-x-10-10-application –

+1

Yukarıdaki hack yerine bu çözümü kullanın, teşekkürler Tim – leonarth

6

işaretini kaldırın "İlk Kontrolör mı", ama o zaman film şeridi ve ayarlamanız gerekir onun elle NSWindowController ilişkili.

bunu yaparken kesin yolu Burada teklif edeceğiz, hangi in this answer gösterilmiştir:

[...] pencere denetleyicisi için bir mülk kurun AppDelegate, içinde:

@property NSWindowController *myController; 

applicationDidFinishLaunching: yönteminizin uygulanmasında, Storyboard'a bir başvuru oluşturun. Bu şekilde pencere denetleyicinize film şeridinden erişebilirsiniz. Bundan sonra, tek yapmanız gereken, pencere denetleyicinizi showWindow: yöntemini göndererek pencereyi görüntülemektir. "kapatıldığında Release" muhtemelen unuttum

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)` 

tek şey işaretini kaldırın oldu:

#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

Bunu yapmanın yolu denemiş gibi bulun. Bu, pencereyi hemen serbest bırakır ve doğru tanımlayıcıya sahip olsanız bile, storyboard yükleme mekanizmasının onu bulmasını engeller.