- (void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillShown:)
name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillBeHidden:)
name:UIKeyboardWillHideNotification object:nil];
}
- (void)keyboardWillShown:(NSNotification *)aNotification {
BOOL isMessageEdit = [_inputTextField isEditing];
if(isMessageEdit){
NSDictionary* info = [aNotification userInfo];
CGSize keyboardSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
float time = [[info objectForKey:UIKeyboardAnimationDurationUserInfoKey] floatValue];
NSLog(@"keyboardSize.height is %f",keyboardSize.height);
[UIView animateWithDuration:time animations:^{
CGRect frame = self.base_baseView.frame;
frame.origin.y -= keyboardSize.height;
self.base_baseView.frame = frame;
}];
}
}
- (void)keyboardWillBeHidden:(NSNotification *)aNotification{
NSDictionary* info = [aNotification userInfo];
float time = [[info objectForKey:UIKeyboardAnimationDurationUserInfoKey] floatValue];
[UIView animateWithDuration:time animations:^{
CGRect frame = self.base_baseView.frame;
frame.origin.y = 64;
self.base_baseView.frame = frame;
}];
}
其中BOOL isMessageEdit = [_inputTextField isEditing];是用来判断是不是_inputTextField这个textfield在编辑状态,然后利用 NSDictionary* info = [aNotification userInfo];来获取键盘的一些信息,我将这个字典打印出来如下:
{
UIKeyboardAnimationCurveUserInfoKey = 7;
UIKeyboardAnimationDurationUserInfoKey = "0.25";
UIKeyboardBoundsUserInfoKey = "NSRect: {{0, 0}, {768, 318}}";
UIKeyboardCenterBeginUserInfoKey = "NSPoint: {384, 1183}";
UIKeyboardCenterEndUserInfoKey = "NSPoint: {384, 865}";
UIKeyboardFrameBeginUserInfoKey = "NSRect: {{0, 1024}, {768, 318}}";
UIKeyboardFrameEndUserInfoKey = "NSRect: {{0, 706}, {768, 318}}";
}
可以看到键盘的信息,比较常用的UIKeyboardAnimationDurationUserInfoKey键盘弹起的时间,UIKeyboardFrameBeginUserInfoKey可以获取键盘弹出的高度
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillShown:)
name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillBeHidden:)
name:UIKeyboardWillHideNotification object:nil];
CGSize keyboardSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
float time = [[info objectForKey:UIKeyboardAnimationDurationUserInfoKey] floatValue];
4.将view在获取的时间里弹起键盘的高度:
[UIView animateWithDuration:time animations:^{
CGRect frame = self.base_baseView.frame;
frame.origin.y -= keyboardSize.height;
self.base_baseView.frame = frame;
}];
5.在键盘将要收起的通知里,将页面恢复:
[UIView animateWithDuration:time animations:^{
CGRect frame = self.base_baseView.frame;
frame.origin.y = 64;
self.base_baseView.frame = frame;
}];
我这个带有导航栏,所以从64开始,你的如果没有可以设置y=0哦。搞定!!