您的位置:首页 > 移动开发 > IOS开发

ios键盘弹起不遮挡输入框

2015-10-23 11:27 337 查看
- (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}}";
}
可以看到键盘的信息,比较常用的[b]UIKeyboardAnimationDurationUserInfoKey键盘弹起的时间,[b]UIKeyboardFrameBeginUserInfoKey可以获取键盘弹出的高度[/b][/b]

我是这样做的,想要避免_inputTextField被遮挡:
1.在进入页面之前注册一个通知,分别是键盘将要弹起和键盘将要收起的通知:

[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillShown:)
name:UIKeyboardWillShowNotification object:nil];



[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillBeHidden:)
name:UIKeyboardWillHideNotification object:nil];

2.判断是不是这个文本框在编辑:
BOOL isMessageEdit = [_inputTextField isEditing];
3.获取键盘弹出时间和弹出高度
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哦。
搞定!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: