您的位置:首页 > 产品设计 > UI/UE

iphone键盘的回收 && 键盘弹起遮挡UITextFiled等空间问题解决

2015-08-22 14:23 519 查看
<span style="background-color: rgb(255, 255, 255);"><span style="font-family:Arial, Helvetica, sans-serif;"> </span><strong><span style="font-family:Microsoft YaHei;font-size:18px;">iPhone的键盘唤醒容易 想要回收却有点小问题 Xcode并没有固定的函数或是固定的机制对键盘进行回收 想要做到键盘的回收还需要自己一点一点的敲代码。</span></strong></span>


下面几项键盘回收的方法是大家比较常用的,1~3项都是日常中大家经常使用的方法 就是通过触发事件来完成对键盘的回收 但是在我们日常使用手机的习惯中 我们更倾向于点击除textField 之外的地方来回收键盘 这就用到了第4种方法 点击空白处进行键盘的回收

1. [self.view
endEditing:YES];

2.[textField resignFirstResponder];

3.代理实现return按键退出键盘

3.1在.h文件中添加协议

<UITextFieldDelegate>
3.2在需要的textField写代理
textField.delegate =
self;
3.3 重写监控程序
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder];
return YES;
}
4在屏幕上 点击除textField之外的地方退出键盘

4.1在屏幕的初始化中(包含textField)添加点击事件

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(keyBoard)];
//触摸屏幕的手指数
tap.numberOfTapsRequired = 1;
// 触摸次数
tap.numberOfTouchesRequired = 1;
[self.window addGestureRecognizer:tap];
4.2写触碰已发的事件

- (void) keyBoard
{
[self.window endEditing:YES];
}

相信大家都用过微信 微信的UITextField都是放在屏幕的下方 当触碰输入框的时候 会自动弹出键盘 并且UITextField会随着键盘而移动在屏幕上方的位置(这里我们先忽略屏幕上面聊天记录也随着上升的现象) 以下两种方法分别是我解决这一问题的方法

#pragma mark 方法一

1.通过修改textField的fram来进行改变页面布局

1.1为需要改变位置的textField的设置触发方式

_pasIn = [[UITextField alloc] initWithFrame:CGRectMake(140, 600, 150, 40)];
_pasIn.placeholder = @"请输入密码";

[_pasIn addTarget:self action:@selector(textFieldShouldBeginEditing:) forControlEvents:UIControlEventEditingDidBegin];
1.2在.h文件中添加<UITextFieldDelegate> 代理
1.3重写textField自带方法

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
// 动画输出
[UIView animateWithDuration:0.25 animations:^{
// 不能直接对textField.frame进行修改
CGRect fram = textField.frame;
// 键盘高度为216
fram.origin.y = 600 - 216;
textField.frame = fram;
}];
return YES;
}

1.4键盘回收 按照需求进行设置 只需要在触发事件的时候 实现将textField的fram.origin.y 改成你原来坐标即可

我采用的是点击return按钮进行回收键盘

1.5注意 本方法是知道系统弹出的键盘类型进行修改的 因为中英文键盘还有数字键盘的高度都不相同

我们都知道 Xcode给我们提供的键盘种类很多 如果按照第一种方法来进行设计 代码会非常的多。如果加入第三方的键盘 那就更是数不胜数了,所以我建议大家使用第二种方法,动态获取键盘的高度
#pragma mark 方法二

2.根据用户使用不同的键盘来对textField进行调整

2.1设置键盘弹起监测
[NSNotificationCenter keyBoardView] addObserver:self selector:@selector(keyboard:) name:UIKeyboardWillShowNotification object:nil];
2.2进行方法实现

-(void)keyboard:(NSNotification *)note
{
// 大家可以打印一下 note 它返回的是键盘的fram center bounds等信息
NSDictionary *info = [note userInfo];
CGSize keyboardSize = [[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size;

// 这里在获取键盘的高度之后 对UITextField的位置进行修改
CGFloat changeY = (460 - keyboardSize.height)
- nameField.frame.size.height;

nameField.frame = CGRectMake(35,
changeY, 250, 35);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: