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);
}
相关文章推荐
- Opensack Issue & Solution: "HypervisorUnavailable: Connection to the hypervisor is broken on host"
- LinkedBlockingQueue多线程测试
- Qt:在Quick中使用QZXing库做二维码扫描
- Burp Suite--攻击web 应用程序的集成平台
- uva 11235 Frequent values RMQ问题
- String 类型基本转换 valueOf
- java String,StringBuffer和StringBuilder
- UIImage的两个方法的内存分析
- view 在父view 拖动不过边界(UIPanGestureRecognizer)
- 算法-QuickSort
- [LeetCode] N-Queens II
- UICollectionview Xib 行间距
- ListView UI 混乱问题
- [LeetCode] N-Queens
- Ubuntu system build
- Juerry 实现让复选框实现单选
- UI的初步知识
- hdu 5412 CRB and Queries 2015多校联合训练赛#10 分治 求区间第k大数
- UISegmentControl
- UILabel 根据内容的多少来计算label的frame