在你的代碼相關位置添加兩個事件
UIKeyboardWillShowNotification,這個是鍵盤即將彈出的事件通知名稱
UIKeyboardWillHideNotification,這個是鍵盤即將消失的事件通知名稱
在這兩個通知的回調方法中處理你的工具條動畫就好了,鍵盤的相關參數會在NSNotification實例中的userInfo對象中傳過去(鍵盤的高度、寬度、鍵盤動畫的duration等),你能夠在回調函數中根據這些參數處理你的動畫,讓工具條和鍵盤動畫達到同步的效果。
若是你的系統是ios5,那須要注意一點的就是,不一樣輸入法的鍵盤高度不一樣了(多是216或252),你可能須要根據鍵盤的具體高度來指定工具條的高度,而不能統一寫死爲216了。
同時,ios5裏面還增長了一個事件通知名稱:
UIKeyboardWillChangeFrameNotification
這個通知會在鍵盤即將改變其大小的時候發出來(好比說鍵盤彈出、收起、用戶切換輸入法、用戶分享鍵盤時引發的鍵盤大小變化),若是你想要你的工具條嚴格保持在鍵盤頂部的時候,就須要監聽這個事件。
今天在ios5裏面偶然發現了問題,補充一下。
UIKeyboardWillChangeFrameNotification
這個通知會在鍵盤即將改變其大小或位置的時候發出來,包括:
1:鍵盤彈出、收起。
2:用戶切換輸入法。
3:用戶分割鍵盤(iPad專有)ios
4:若是你在viewWillDisappear中讓鍵盤收起(好比說textField resignFirstResponder),鍵盤彷佛不會收起,而只是會改變frame的orig值。app
參考如下代碼(將self.view換成須要上移的view便可):ide
-(void)keyboardWillChangeFrame:(NSNotification *)notify{ //NSLog(@"=====%@,%@",notify.object,notify.userInfo); self.inputView__.backgroundColor=[UIColor groupTableViewBackgroundColor]; NSDictionary *userInfo=notify.userInfo; NSString *keyboard_frame_begin_NSRectString= [userInfo[UIKeyboardFrameBeginUserInfoKey] description]; NSString *keyboard_frame_begin_CGRectString= nil; if ([keyboard_frame_begin_NSRectString hasPrefix:@"NSRect"]) { keyboard_frame_begin_CGRectString=[keyboard_frame_begin_NSRectString stringByReplacingOccurrencesOfString:@"NSRect"withString:@"CGRect" ]; }else if( [keyboard_frame_begin_NSRectString hasPrefix:@"CGRect"]){ keyboard_frame_begin_CGRectString=keyboard_frame_begin_NSRectString; } CGRect keyboard_frame_begin= CGRectFromString(keyboard_frame_begin_CGRectString); NSString *keyboard_frame_end_NSRectString= [userInfo[UIKeyboardFrameEndUserInfoKey] description]; NSString *keyboard_frame_end_CGRectString= nil; if ([keyboard_frame_end_NSRectString hasPrefix:@"NSRect"]) { keyboard_frame_end_CGRectString=[keyboard_frame_end_NSRectString stringByReplacingOccurrencesOfString:@"NSRect"withString:@"CGRect" ]; }else if( [keyboard_frame_end_NSRectString hasPrefix:@"CGRect"]){ keyboard_frame_end_CGRectString=keyboard_frame_end_NSRectString; } CGRect keyboard_frame_end= CGRectFromString(keyboard_frame_end_CGRectString); CGRect rect=self.view.frame; CGFloat y_keyboard_begin=keyboard_frame_begin.origin.y; CGFloat y_keyboard_end=keyboard_frame_end.origin.y; CGFloat y_current=CGRectGetMinY(rect); CGFloat y_keyboard_change=y_keyboard_end-y_keyboard_begin; CGFloat y= y_current +y_keyboard_change; //NSLog(@"y===========%f",y ); [UIView animateWithDuration:0.0 animations:^{ self.view.frame=CGRectMake(0, y, CGRectGetWidth(rect), CGRectGetHeight(rect)); }]; }