2010-08-01 65 views
4

我有一個基於「基於窗口的應用程序」模板的iPhone應用程序,該應用程序使用帶有一些嵌入式子視圖的主視圖。UIActionSheet不顯示 - 屏幕變暗

對於某些操作,我需要用戶確認。因此,我創建了一個UIActionSheet並詢問用戶反饋。

問題是,操作表完全不顯示。相反,屏幕變暗。工作表和請求的按鈕不顯示。之後,應用程序掛起。作爲通常顯示操作表的動畫的一部分,屏幕變暗是正常行爲。

奇怪的是,如果在viewDidLoad方法中調用,相同的代碼也可以正常工作。如果在啓動需要確認操作的buttonPressed方法中調用它,則不起作用。你可以看到,我已經向UIActionSheetDelegateProtocol的協議處理程序添加了一些日誌消息。將按預期方式調用「將呈現」和「已呈現」方法,但表單不顯示。

有人知道,這裏有什麼問題嗎?

+0

iphone-sdk-3標籤?你實際上仍在使用3.x SDK? – 2010-10-13 22:16:36

回答

3

我想知道 [actionSheet showInView: self.view];是否足以讓actionSheet本身保留self.view。 編輯:保留從1跳到4的計數,所以在這裏沒有問題)

您是否檢查過您的視圖的尺寸?工作表位於視圖內,但如果self.view會引用大滾動視圖,則可能只在表面下方有一個工作表。總之,你確定self.view.frame和self.view.bounds在你所指的兩種情況下有相同的值嗎?它是相同的觀點(當只是NSLog(@"%x",self.view) - 它是地址)?

編輯澄清:做

NSLog(@"%f %f %f %f", 
     self.view.frame.origin.x,self.view.frame.origin.y, 
     self.view.frame.size.width,self.view.frame.size.height); 

,並請告訴你的控制檯上看到的。我得到你的「屏幕變暗」,如果我設置一個0,0,0,0幀或0,0,320,800幀,所以這可能是...

+1

那不是它,而是它把我推向了正確的方向。我現在解決了它。 問題是:我意外地將iPad中的MainWindow.xib複製到我的通用應用程序的iPhone部分。 iPad版本的尺寸爲1024x768。 在「viewDidLoad」中,該窗口尚未由AppDelegate設置。因此,操作系統不會使用錯誤的座標。之後,窗口被定義並且表單被渲染到錯誤的位置。有趣的是,self.view.frame一直是(0 20; 320 460),但view.window.frame是(0 0; 768 1024)。 謝謝。 – h2stein 2010-08-01 12:29:55

+4

只是一個方便的提示mvds:您可以使用NSStringFromCGRect(self.view.frame)而不是NSLogging逐個幀的每個值。 – 2010-10-06 20:07:35

+0

@Matt:謝謝你的提示! – mvds 2010-10-13 22:15:13

0

其實,我認爲你已經擊中了我見過的同樣的問題。

在iOS系統中8 & 9,UIActionSheet確實得到顯示哦......但背後屏幕鍵盤,所以你不能看到它。你只會看到屏幕的其餘部分變暗。

這顯然是蘋果最新的UI改進理念,以保持屏幕整潔。 ;-)

簡單的解決辦法是顯示前添加一行代碼你UIActionSheet

[self.view endEditing:true]; 

這駁回了屏幕鍵盤,使您的再次動作優美片可見。

或者,我有documented here如何用UIAlertController替換UIActionSheet