2014-06-14 94 views
15

在Objective-C在一個UIViewController我做這在我的iOS應用程序,以獲得keyWindow參考的viewDidLoad方法:如何在swift應用程序中獲取keyWindow引用?

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

所以,我移植這個視圖控制器到斯威夫特和我做這一個viewDidLoad中電話:

let window = UIApplication.sharedApplication().keyWindow 

我想了解爲什麼窗口是零。當我把一個斷點正確的行後,我再在控制檯窗口進行檢查,我得到這個:

(lldb) po window 
nil 

我怎樣才能得到窗口是我在迅速應用的keyWindow一個有效的參考?

+0

'let window:UIWindow? = UIApplication.sharedApplication()。windows [0] as? UIWindow'可能會呈現你所尋找的內容......或者因爲'func viewDidAppear(_ animated:Bool)'(直到你的視圖可見!),你可以通過'self.view.window'直接訪問窗口,也許這就是你看什麼... – holex

回答

3

在viewDidLoad時,還不能設置關鍵窗口。你的代碼在viewDidAppear中工作正常。或者,您可以在viewDidLoad中獲取windows數組,並從該數組中獲取一個(如果有多個)窗口。

17

當我在尋找快速獲得窗口時,我開始提到這個問題。如果你想獲得窗口,而不是keyWindow,試試這個:

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

更新了斯威夫特3:(感謝@Trevor)

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

謝謝,:)它節省了我的時間。 –

+0

但是window.keyWindow將會是false?! let windowFirst = NSApp.windows.first print(windowFirst!.keyWindow) – allenlinli

+0

@allenlinli我認爲討論圍繞'iOS',不確定'macOS'。 –

0

更新superarts.org對斯威夫特3回答:

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

不要在didLoad函數中調用窗口調用viewController的viewDidAppear函數中的keyWindow

相關問題