解决键盘遮挡输入框问题
2015-12-26 00:04
513 查看
- (void)viewDidLoad {
[super
viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
//创键10个输入框
for (int i=0; i<10; i++)
{
UITextField *field = [[UITextField
alloc]initWithFrame:CGRectMake(20,
20+i*60,
200, 50)];
field.borderStyle =
UITextBorderStyleRoundedRect;
field.placeholder = [NSString
stringWithFormat:@"第%d个输入框",i];
//设置输入框代理
field.delegate =self;
[self.view
addSubview:field];
}
//如果输入框被挡住,那么将self.view上移
//先要获取到键盘的frame,才能得知输入框是否被挡住
//通过添加观察者,来拿到键盘的frame
//监听键盘抬起事件.
//UIKeyboardWillShowNotification
系统封装的事件
[[NSNotificationCenter
defaultCenter]addObserver:self
selector:@selector(KeyboardWillShow:)
name:UIKeyboardWillShowNotification
object:nil];
//监听键盘掉下的事件
[[NSNotificationCenter
defaultCenter]addObserver:self
selector:@selector(KeyboardWillHide:)
name:UIKeyboardWillHideNotification
object:nil];
}
- (void)KeyboardWillShow:(NSNotification *)noti
{
//先取到第7个输入框的下边界
//再取到键盘的上边界
//如果输入框的下边界 -
键盘的上边界 大于0,则代表遮挡
NSLog(@"KeyboardWillShow");
//1.取到输入框的上边界
//取到通知信息
NSDictionary *dic = noti.userInfo;
NSLog(@"dic==%@",dic);
//接收键盘高度信息
NSValue *keyboardValue = [dic
objectForKey:@"UIKeyboardFrameEndUserInfoKey"];
CGRect keyboardRect = keyboardValue.CGRectValue;
//2.计算输入框与键盘的间隔
//输入框框下边界 -
键盘上边界
NSInteger offset =
_selectField.frame.origin.y +_selectField.frame.size.height
- keyboardRect.origin.y;
//大于0代表遮挡
if (offset >0)
{
//将self.view上移offset个高度
self.view.frame =
CGRectMake(0, -offset,
self.view.frame.size.width,
self.view.frame.size.height);
}
}
- (void)KeyboardWillHide:(NSNotification *)noti
{
NSLog(@"KeyboardWillHide");
//键盘消失,self.view还原位置
self.view.frame =
self.view.bounds;
}
#pragma mark - UITextFieldDelegate
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
//开始编辑的时候,记下选择输入框
//这样才能拿到当前输入框的frame
_selectField = textField;
}
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
//让键盘掉下,触发KeyboardWillHide回调
[textField resignFirstResponder];
return
YES;
}
[super
viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
//创键10个输入框
for (int i=0; i<10; i++)
{
UITextField *field = [[UITextField
alloc]initWithFrame:CGRectMake(20,
20+i*60,
200, 50)];
field.borderStyle =
UITextBorderStyleRoundedRect;
field.placeholder = [NSString
stringWithFormat:@"第%d个输入框",i];
//设置输入框代理
field.delegate =self;
[self.view
addSubview:field];
}
//如果输入框被挡住,那么将self.view上移
//先要获取到键盘的frame,才能得知输入框是否被挡住
//通过添加观察者,来拿到键盘的frame
//监听键盘抬起事件.
//UIKeyboardWillShowNotification
系统封装的事件
[[NSNotificationCenter
defaultCenter]addObserver:self
selector:@selector(KeyboardWillShow:)
name:UIKeyboardWillShowNotification
object:nil];
//监听键盘掉下的事件
[[NSNotificationCenter
defaultCenter]addObserver:self
selector:@selector(KeyboardWillHide:)
name:UIKeyboardWillHideNotification
object:nil];
}
- (void)KeyboardWillShow:(NSNotification *)noti
{
//先取到第7个输入框的下边界
//再取到键盘的上边界
//如果输入框的下边界 -
键盘的上边界 大于0,则代表遮挡
NSLog(@"KeyboardWillShow");
//1.取到输入框的上边界
//取到通知信息
NSDictionary *dic = noti.userInfo;
NSLog(@"dic==%@",dic);
//接收键盘高度信息
NSValue *keyboardValue = [dic
objectForKey:@"UIKeyboardFrameEndUserInfoKey"];
CGRect keyboardRect = keyboardValue.CGRectValue;
//2.计算输入框与键盘的间隔
//输入框框下边界 -
键盘上边界
NSInteger offset =
_selectField.frame.origin.y +_selectField.frame.size.height
- keyboardRect.origin.y;
//大于0代表遮挡
if (offset >0)
{
//将self.view上移offset个高度
self.view.frame =
CGRectMake(0, -offset,
self.view.frame.size.width,
self.view.frame.size.height);
}
}
- (void)KeyboardWillHide:(NSNotification *)noti
{
NSLog(@"KeyboardWillHide");
//键盘消失,self.view还原位置
self.view.frame =
self.view.bounds;
}
#pragma mark - UITextFieldDelegate
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
//开始编辑的时候,记下选择输入框
//这样才能拿到当前输入框的frame
_selectField = textField;
}
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
//让键盘掉下,触发KeyboardWillHide回调
[textField resignFirstResponder];
return
YES;
}
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- 讲解iOS开发中基本的定位功能实现
- js判断客户端是iOS还是Android等移动终端的方法
- IOS开发环境windows化攻略
- 浅析iOS应用开发中线程间的通信与线程安全问题
- 检测iOS设备是否越狱的方法
- .net平台推送ios消息的实现方法
- 探讨Android与iOS,我们将何去何从?
- Android、iOS和Windows Phone中的推送技术详解
- IOS 改变键盘颜色代码
- 举例详解iOS开发过程中的沙盒机制与文件
- Android和IOS的浏览器中检测是否安装某个客户端的方法
- 分享一个iOS下实现基本绘画板功能的简单方法
- javascript实现阻止iOS APP中的链接打开Safari浏览器