2010-04-19 70 views
27

我想創建一個視圖(UIControl),它阻止所有輸入並在驗證用戶時顯示UIActivityIndi​​catorView。添加UIView以上所有其他視圖,包括狀態欄

UIActionSheet和U​​IAlertView都管理添加一個黑色的半透明的視圖頂部的所有其他視圖來阻止輸入,我想做類似的事情。我已經嘗試在[[UIApplication sharedApplication]窗口]數組中添加我的視圖到頂層的UIWindow,雖然這確實將它放在UIKeyboard的上方(如果它是可見的),但它不會將它放在StatusBar上說得通)。

我的下一個嘗試是擴展UIAlertView,刪除它的所有子視圖並設置其layer.contents = nil,然後將ActivityIndi​​cator添加爲子視圖。這個效果很好,但是當你把它叫做「show」時,我似乎無法殺掉UIAlertView的默認彈性轉換。

有沒有人有最好的方式解決這個問題,讓我完全控制的任何指針?

哦,我知道阻塞輸入並不是很好,但我確實確保它很短的時間,它的好處是讓用戶明白他們的動作必須完成以便進行處理。

+2

爲什麼「隱藏」狀態欄?爲什麼不把它藏起來,是半透明的,還是完全忽略它?如果我記得正確,狀態欄不響應觸摸。 – 2010-04-19 14:29:06

+5

我希望它看起來像是在重疊視圖下。這使用戶清楚他們目前無法互動。不幸的是,讓它變成半透明的,隱藏起來看起來很奇怪,如果只是在認證期間。 它確實響應觸摸。默認是將活動的UIScrollView滾動到頂部。 – 2010-04-19 22:16:18

回答

51

我做了一些周圍的多個挖掘一切API的,並相信我已經完成了。

爲了在整個屏幕上顯示視圖,您需要創建自己的UIWindow並將其windowLevel屬性設置爲UIWindowLevelStatusBar。然後,您可以將您的自定義子視圖添加到此窗口。

請注意,Apple不鼓勵,但他們也不禁止創建多個窗口。

UIWindow *statusWindow = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
statusWindow.windowLevel = UIWindowLevelStatusBar; 
statusWindow.hidden = NO; 
statusWindow.backgroundColor = [UIColor colorWithWhite:0.0 alpha:0.7]; 
[statusWindow makeKeyAndVisible]; 

當你想從它看起來好像你從內存中釋放它的屏幕刪除窗口。

[statusWindow release]; 

這並不感到完全安全的,但我沒有得到任何錯誤,它似乎砸出來的UIApplication的窗口陣列。請讓我知道如果這是錯誤的。

更新:

一個我碰到是UIStatusBar沒有采取觸摸事件到活動的UIScrollView滾動到頂部我已經顯示和刪除此疊加窗口之後,另一個問題。解決方案是在覆蓋層發佈後將主窗口設置回關鍵窗口。

[primaryWindow makeKeyWindow]; 
+2

此代碼在iOS 4.2中不適用於我。狀態窗口將出現,但不會超出OS提供的默認狀態欄。有小費嗎?從iOS 4.2起,這對你仍然有用嗎? – jbrennan 2010-12-02 00:55:39

+0

它的工作原理,但當我提出一個viewController動畫,我的這個窗口,其中有一個活動指標落後所呈現的viewController,任何解決這個問題? – 2012-01-17 15:00:30

+1

當我嘗試將界面旋轉到橫向時,此失敗。statusWindow只是堅持原點狀態欄的位置。 – 2012-02-21 09:20:41

1

我即將做同樣的事情不久,發現如下

http://www.dejal.com/developer/dsactivityview

看起來有你要找的

+0

感謝您的鏈接,但這並不包含我所能看到的狀態欄。我在半透明視圖之後會覆蓋整個區域的用戶界面。 – 2010-04-19 12:28:53

5

我需要我的主窗口內就所有其他視圖頂部視圖。最初,我想在我的關鍵窗口之上展示另一個窗口。因爲,蘋果勸阻使用多個窗口,我決定反對它。

下面的代碼的伎倆對我來說:

我說我的觀點作爲副視點我的重要窗口自動展示我對所有其他視圖頂視圖。在我的情況下,該代碼是在應用程序的委託

[self.window addSubview:topViewController.view] 

,當我的觀點做,下面的代碼從窗口中刪除。

[topViewController.view removeFromSuperview]; 
+2

這不會覆蓋狀態欄 – OpenThread 2013-08-11 13:03:15

+0

不知何故在景觀應用程序中,這增加了肖像視圖,這看起來很愚蠢。 – Dvole 2014-02-02 13:26:33

相關問題