2010-10-06 63 views
1

我正在嘗試創建一個模擬UIAlertView行爲的UIView(和相關聯的UIViewController)。根據我的要求,似乎更適合從頭開始創建我自己的實現,而不是嘗試子類化和修改UIAlertView。爲了做到這一點,我得到了應用程序委託的引用,然後將UIViewController.view(約爲0.6的alpha)添加爲主應用程序窗口的子視圖。這意味着它將出現在屏幕上所有其他視圖的頂部,並模擬UIAlertView中找到的灰色背景。UIView覆蓋iPhone狀態/承載條

UIView(即UIViewController.view)未覆蓋屏幕頂部的狀態/載體欄外,所有程序都運行良好。這意味着除了載體欄外,所有的屏幕都是灰色的,看起來有點奇怪!有沒有辦法讓UIView出現在承載條的頂部?我聽到了有關在應用程序中添加第二個UIWindow的意見,但這似乎不明智(因爲Apple文檔稱應該只在應用程序中有一個UIWindow),即使這是最佳解決方案,我也不確定關於這種解決方案的技術實施。

+0

請記住,這將是一個非常糟糕的主意,一旦iOS 5公開。顯示狀態欄的應用程序依靠它來顯示通知中心,如果您在其上放置某些內容,則可能會破壞此功能。 隱藏狀態欄將是一個更好的方法,因爲通知中心下拉行爲不同於此,並且您不會破壞它。 – 2011-08-06 09:48:00

回答

1

爲了覆蓋狀態欄而不隱藏它,你需要在狀態欄上方顯示狀態欄,並且由於狀態欄顯示在另一個窗口中,所以必須使用第二個窗口和UIWindowLevelStatusBar。

我已經做了這樣的事情,它確實有效,但感覺像是黑客,感謝蘋果公司的文檔,或者缺少它。您照常創建第二個窗口。要隱藏它,你應該設置它的隱藏屬性並釋放它。爲了確保你沒有漏窗,我推薦爲了調試而繼承UIWindow,並且重寫它的dealloc以包含NSLog。另外,看看UIApplication的windows屬性,它應該反映窗口正常關閉。

儘管如此,後方最大的疼痛是設備方向的改變。

+0

感謝Constique。你的迴應給了我使用UIWindowLevelStatusBar的關鍵線索。在使用該關鍵字對StackOverflow進行更多搜索之後,我發現了一些完美的示例代碼 - http://stackoverflow.com/questions/2666792/add-uiview-above-all-other-views-including-statusbar。希望這對其他同樣希望實現相同目標的人有用。 – Skoota 2010-10-06 09:38:48