2011-11-23 45 views
0

我想顯示提示以獲取用戶的用戶名和密碼。UIAlertView文本字段不移動

我這樣做是通過顯示UIAlertView並將UITextFields作爲子視圖添加到它。

最近我將項目移至XCode 4.2,並更新了所有項目設置。我的基本SDK設置爲iOS 5.0,我的部署目標設置爲4.0。

然後我注意到它只是爲armv7架構而構建的,所以我將其改爲包含armv6,因爲我也想支持iPhone 3G。

這樣做後,我注意到UIAlertView沒有像以前那樣向上移動,現在當它顯示時它被鍵盤覆蓋。我在Apple文檔中讀到,你不應該繼承UIAlertViews(http://developer.apple.com/library/ios/#documentation/uikit/reference/UIAlertView_Class/UIAlertView/UIAlertView.html),所以我改變了我做事情的方式。這並沒有解決問題。

我已經注意到,通過將Build Setting - 「Build active architecture only」設置爲YES,我可以在我的手機(iPhone 4,armv7架構)上運行它。

我懷疑這個問題與嘗試構建armv6有關(並且實際上是從我正在嘗試構建的架構中移除這個結構,使我可以正確地向上移動警報)。

我想我現在應該回答我的問題了......我很努力地理解爲什麼這是行爲方式。我在某處(現在無法找到鏈接)讀取了在iOS 4及更高版本中向UIAlertView添加文本字段時無需手動移動提醒。由於我至少爲iOS 4構建,不應該在兩種架構上都能工作嗎?

另外,我怎樣才能讓它建立armv6,並仍然有警報正確地向上移動?

編輯:也許我錯了,但我注意到,我有我的手機的2個實例,我可以部署應用程序。選擇第一個和建築物給了我一個應用程序,在這個應用程序中,UIAlertView不會向上移動,但選擇第二個可以正常工作。會後的截圖,但我是一個新用戶,所以我沒有必要的權限,但...

回答

1

衝電氣

我已經成功地拿出其中的作品,並得到一個解決方案UIAlertView處於正確的位置,但我仍然不完全確定問題的根本原因是什麼。

我解決它通過響應UIAlertViewDelegate方法willPresentAlertView:和執行以下

- (void) willPresentAlertView: (UIAlertView *) alertView { 

    UIWindow *keyWindow = [[UIApplication sharedApplication] keyWindow]; 

    if (keyWindow.center.y - alertView.center.y < 0.001f) { 

     CGPoint center = [alertView center]; 
     center.y = center.y - 108.0f; 
     [alertView setCenter:center]; 
    } 
} 

它檢查UIAlertView是否在屏幕的中心,並移動它,如果它是(即,如果OS不是招已經計算出它的正確位置)。注意:如果您希望此功能既適用於縱向方向,也適用於橫向方向,則您需要添加設備所在的特定方向的檢查,然後相應地調整警報的上移量。