2014-06-14 12 views
15

w Objective-C w metodzie viewDidLoad z UIViewController mogę to zrobić, aby uzyskać odniesienie keyWindow w mojej aplikacji iOS:Jak uzyskać odniesienie keyWindow w szybkiej aplikacji?

UIWindow * keyWindow = [[UIApplication sharedApplication] keyWindow]; 

Tak, jestem przenoszenie tego kontrolera wgląd Swift i robię to jedna z viewDidLoad zadzwoń:

let window = UIApplication.sharedApplication().keyWindow 

Próbuję zrozumieć, dlaczego okno jest zerowe. Kiedy umieścić punkt przerwania prawo po tej linii I wtedy sprawdzać okno konsoli i uzyskać w ten sposób:

(lldb) po window 
nil 

Jak mogę uzyskać okno być ważne odniesienie do keyWindow mojej aplikacji w systemie SWIFT?

+0

'let window: UIWindow? = UIApplication.sharedApplication(). Windows [0] as? UIWindow' może przedstawiać to, czego szukasz ... lub od 'func viewDidAppear (_ animated: Bool)' (dopóki twój widok nie jest widoczny!) Masz bezpośredni dostęp do okna przez 'self.view.window', może to jest na co zwracasz uwagę ... – holex

Odpowiedz

3

Kluczowe okno nie może być jeszcze ustawione w czasie viewDidLoad. Twój kod działa poprawnie w viewDidAppear. Alternatywnie można uzyskać tablicę Windows w viewDidLoad i uzyskać jedną (jeśli jest więcej niż jedna) okien z tej tablicy.

17

Doszedłem do tego pytania, gdy szukałem szybkiego okna. Jeśli chcesz uzyskać okno zamiast keyWindow, spróbuj tego:

if let app = UIApplication.sharedApplication().delegate as? AppDelegate, let window = app.window { 
    MBProgressHUD.show(text, view:window) 
} 

Aktualizacja dla Swift 3: (Dzięki @Trevor) odpowiedź

if let app = UIApplication.shared.delegate as? AppDelegate, let window = app.window { 
    MBProgressHUD.show(text, view:window) 
} 
+0

Dzięki, :) oszczędzam czas. –

+0

Ale window.keyWindow będzie fałszywy ?! niech windowFirst = NSApp.windows.first print (windowFirst! .keyWindow) – allenlinli

+0

@allenlinli Myślę, że dyskusja wokół 'iOS', nie wiedząc o' macOS'. –

0

aktualizowania superarts.org dla Swift 3:

if let app = UIApplication.shared.delegate as? AppDelegate, let window = app.window { 
     MBProgressHUD.show(text, view: window) 
} 
0

Nie wywołuj okna w funkcji didLoad wywołaj funkcję keyWindow w funkcji viewDidAppear w ViewController

Powiązane problemy