2011-03-03 64 views
4

我有一個包含多個文本字段的視圖,並且我想要執行與單擊文本字段時「聯繫人」應用程序所執行的操作相同的效果,否則該文本字段會在鍵盤出現時隱藏。當我解僱鍵盤時,我計劃正確地將視圖向下移動。移動視圖以適應鍵盤

我懷疑我是通過更改Frame值來做到這一點的,但我需要這樣做才能讓它動起來,這樣它就不會對用戶產生衝擊。

建議?例子?

回答

6

在UIScrollView中包裝您的視圖的確是要走的路。與textFieldDidEndEditing代表一樣,您也可以訂閱UIKeyboardDidHideNotificationUIKeyboardDidShowNotification,並且當您收到關於鍵盤確實隱藏/顯示的通知時,請適當地滾動您的視圖。如果你需要它,我可以張貼的鍵盤通知代碼示例:)

編輯 想我會反正張貼代碼 - 有人可能會發現它的幫助:

您需要申報通知監聽器:

NSObject hideObj = NSNotificationCenter.DefaultCenter.AddObserver(UIKeyboard.DidHideNotification, HandleKeyboardDidHide); 
NSObject showObj = NSNotificationCenter.DefaultCenter.AddObserver(UIKeyboard.DidShowNotification, HandleKeyboardDidShow); 

那麼你的操作方法看起來是這樣的:

void HandleKeyboardDidShow(NSNotification notification) 
{ 
    scrollView.ScrollRectToVisible(textfield.Frame, true); 
} 

void HandleKeyboardDidHide(NSNotification notification) 
{ 
    // scroll back to normal 
} 

編輯2

所以,如果你想刪除的觀察員視圖時被破壞,首先你需要確保你添加的觀察者則使用下面的代碼刪除它們時分配NSObject S:

NSNotificationCenter.DefaultCenter.RemoveObserver(showObj); 
NSNotificationCenter.DefaultCenter.RemoveObserver(hideObj); 

希望有幫助。

+0

我同意觀察員的觀點,最好是在不再需要的時候去掉它們。另外,UIScrollView.ScrollRectToVisible方法需要兩個參數,而不是一個參數。第二個參數是動畫。 – 2011-03-03 18:37:37

+0

對不起!我在公共汽車上從手機上完成 - 將在今天早上更正! – Luke 2011-03-04 00:10:29

+0

這非常好,我真的很感激它,我甚至不知道如何連接到UIKeyboard事件。 textFieldDidBeginEditing每次都會觸發,這也很棒。 – 2011-03-04 14:26:36

2

我剛剛在一個應用程序上做了這個。我使用scrollview來包裝整個視圖,然後在textFieldDidEndEditing-delegate方法上使用scrollToRectVisible。它非常完美!

1

有關keyboard management主題的Apple文檔非常好,包含大多數情況下的代碼(位於底部),您可以將其複製/粘貼到應用程序中。

祝你好運。