2009-06-24 106 views
6

我一直在移動一個略高的警報視圖,所以我可以在屏幕上放置一個鍵盤。我只是通過抓住警報的框架並在我已經顯示警報之後更改Y來做到這一點,以便框架變量是合法的。這在模擬器上可以正常工作,但是當我在硬件上執行此操作時,警報將從正確的位置開始,但幾乎立即跳到它原來的垂直中心位置。 UIAlertView的位置是一個固定的東西,不應該根據可用性準則進行更改,或者我只是做了不正確的事情?我可以移動UIAlertView嗎?

謝謝!

回答

22

什麼操作系統,你想對此?我得到這個對OS 3.0模擬器和OS 3.0設備都工作:

UIAlertView * alert = [ [ UIAlertView alloc ] initWithTitle:@"Alert" message:@"Alert" 
         delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil ]; 

alert.transform = CGAffineTransformTranslate(alert.transform, 0.0, 100.0); 

[ alert show ]; 

CGAffineTransformTranslate有三個參數:現有變換,變換X,和y變換。在我使用的例子中,警報視圖出現比通常高100個像素。試試看看會發生什麼。

此外,我很肯定你可以在顯示警告前修改框架,因爲它可能會將默認情況下init的警報框架設置爲整個屏幕的中心。

1

是不是意味着0123'的警報 - 即:當警報處於活動狀態時,您通常不會執行任何其他用戶輸入?如果是這種情況,那麼爲什麼你需要鍵盤的可視性?

+3

如果他將文本字段添加爲警報視圖的子視圖,那麼在下載應用程序之前,當它提示您輸入iTunes密碼時,希望看到鍵盤就像App Store一樣有意義。 – LucasTizma 2009-10-30 16:48:44

+0

感謝您的評論 - 我沒有想到這種情況。 – teabot 2009-10-30 17:53:25

2

由於iOS4在UIAlertViews中移動變得棘手。我注意到,如果您在UIAlertView上添加UITextField子視圖,則在iOS4上警報會向上移動,以便鍵盤不會與其重疊。這不會發生< iOS4。

此外,我已經注意到,即使在調用show之後警報的框架也沒有初始化,所以沒有簡單的相對CGAffineTransformation的編程方式。唯一的解決方案是根據操作系統版本進行條件轉換。

對我來說,這看起來像是對可隨時更改的UIAlertViews的未記錄行爲進行線程化。我認爲蘋果公司並不意味着我們只能使用警報,而不是使用文本和按鈕(即使他們自己的應用程序違反了此規則)。

我一個人會開始爲這種情況建立我自己的自定義警報。

相關問題