首先,你得監聽鍵盤的事件,最基本的兩個事件:
UIKeyboardWillShowNotification
UIKeyboardWillHideNotification
UIKeyboard...
iOS 5新增加了一些
UIKeyboardDidChangeFrameNotification(will)
一般情況下,前兩個事件已經可以完成你要做的事情。在你的事件處理方法中加上NSNotification參數可以為你獲得更多的東西:
view plainprint?
- (void)keyboardWillShow:(NSNotification *)notification
{
CGPoint beginCentre = [[[notification userInfo] valueForKey:UIKeyboardCenterBeginUserInfoKey] CGPointValue];
CGPoint endCentre = [[[notification userInfo] valueForKey:UIKeyboardCenterEndUserInfoKey] CGPointValue];
CGRect keyboardBounds = [[[notification userInfo] valueForKey:UIKeyboardBoundsUserInfoKey] CGRectValue];
CGRect keyboardFrames = [[[notification userInfo] valueForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
UIViewAnimationCurve animationCurve = [[[notification userInfo] valueForKey:UIKeyboardAnimationCurveUserInfoKey] intValue];
NSTimeInterval animationDuration = [[[notification userInfo] valueForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue];
}
如果你要在程式中使用鍵盤的高度和寬度,永遠不要嘗試去手動指定,動態擷取也很簡單而且一定準確,不會出現鍵盤
擋住輸入框的問題。
你可以利用這些參數把動畫做的和鍵盤一致。假設你要把一個控制項放在Window上,並且想讓它的互動方式和鍵盤一樣,
如果只是簡單的做個向下位移動畫並不能很好的完成,因為你還要考慮從導覽列中Pop出來的時候,這個時候的鍵盤動畫是
在x軸上位移的,你用UIKeyboardFrameEndUserInfoKey擷取的frame可以很準確的做到。
如果在某些特殊的欄位上,你不想用預設的鍵盤,而是用類似於Picker這樣的拾取器,你只需要設定inputView就行了,用你自訂的視圖去替換掉鍵盤;如果你想在鍵盤上面再增加一個視圖,比如toolbar,那麼你可以不用自己對toolbar的位置進行控制,只需要設定inputAccessoryView就行了,這個值預設為nil,設定的視圖將在你的控制項變成第一響應者的時候顯示在inputView的上方。
在UIScrollView(UITableView繼承於它)上,當你觸碰控制項使之變成第一響應者的時候,系統會自動調整位置,避免鍵盤擋住控制項。如果在代碼中用becomeFirstResponder使之變成第一響應者將不會出現自動調整。你可以設定contentOffset去手動調整。其他視圖,最簡單的方法就是修改控制項的frame屬性,讓控制項總是顯示在可見地區。