MBProgressHUD 顯示到view上有一定的局限性,
顯示到Window 上有時候又 不能顯示出來,
對於這麼優秀的一個控制項,如果不能使用正確,使用好,確實有點可惜。
之前一直使用MBProgressHUD顯示loading,saving之類的資訊,一直都沒有什麼問題,突然有一天發現這個問題。發現我的MBProgressHUD(以下簡稱HUD)彈不出來了,但不是每次都彈不出來,這種問題最不容易處理,不知道為何不出來,看代碼邏輯也沒有問題。
我是將HUD加到window上的,就是下面這個window!
UIWindow *keywindow = [[UIApplication
sharedApplication] keyWindow];
漸漸地發現一些規律,每次HUD不能彈出來,前面都是因為出現過AlertView,難道AlertView彈出來的時候會new一個新的window?
UIWindow
*keyWindow
=
[[[UIApplication
sharedApplication]
delegate]
window];(支援5.0以後)
通過查閱資料,得知:
UIAlertView出現時會重新初始化一個UIWindow並設定為keyWindow,這時當使用[[UIApplication shareApplication] keyWindow] 時擷取到的就不是你本意想拿到的應用程式的UIWindow。
[[UIApplication sharedApplication] keyWindow] returning nil
這時你有兩種解決辦法:
第一種:initWithView:
[[MBProgressHUD alloc] initWithView:view];
第二種,也是我想要的方式:找到那個window!
好了,到這裡,HUD彈不出來的問題解決了。
=============我是分割線===========================
但是,還有一個問題,IOS到底提供了幾層Window?
之前只知道:通常,在一個程式中只會有一個UIWindow.通過翻網站,查資料,找到下面這個部落格,關於window level 部分講的很明白。
我就不再贅述了。