界面隨鍵盤頂起來

在你的代碼相關位置添加兩個事件
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));
    }];


}
相關文章
相關標籤/搜索