美文网首页
iOS键盘处理

iOS键盘处理

作者: TryEnough | 来源:发表于2016-03-11 10:01 被阅读1675次

场景一


在iOS开发中,我们经常处理这样的情况:

当键盘出现或者消失的时候,我们需要做一些相应的操作。比如键盘上面的工具条的位置变化等。

这里我们就假设有一个工具条在键盘的上面,我们要求当键盘出现的时候,工具条的位置向上移动始终在键盘的上面,当键盘消失的时候,工具条向下移动到屏幕的下面。

这时候,我们应该怎么处理呢?

思路

为了让工具条上下移动,我们就要求出键盘上下移动的高度值,从而知道工具条该上下移动的高度值

想获取键盘的移动值,就要对键盘的显示和隐藏进行监听,我们这里可以使用通知

是不是觉得思路很清晰了,那么开始吧。

处理步骤

1、给键盘设一个通知

/**

*  给键盘的frame改变添加监听

*  @param keyBoardWillChangeFrame: 监听方法

*/

[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(keyBoardWillChangeFrame:) name:UIKeyboardWillChangeFrameNotification object:nil];

2、在键盘的通知监听方法里面做需要的操作

- (void)keyboardWillChangeFrame:(NSNotification *)notification

{

// 键盘显示\隐藏完毕的frame

CGRect frame = [notification.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];

// 修改底部约束

self.bottomSapce.constant = XMGScreenH - frame.origin.y;

// 动画时间

CGFloat duration = [notification.userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue];

// 动画

[UIView animateWithDuration:duration animations:^{

[self.view layoutIfNeeded];

}];

}

上一段代码解释:

notification.userInfo:

 notification是指传递过来的通知

 userInfo是一个字典,存储任何和通知相关联的可能用到的信息。当一个通知的值发生改变的时候,就会将值存储到userInfo的字典中。例如这里的userInfo包含通知执行的时间,和通知结束时候键盘的frame等信息。

也可以改变工具条的transform实现:

self.toolbar.transform = CGAffineTransformMakeTranslation(0, -keyboardF.size.height);

自定义键盘,只需要设置下面的属性即可

@property (readwrite, retain) UIView *inputView;

最后,一定要记得在dealoc方法里释放监听

- (void)dealloc

{

[[NSNotificationCenter defaultCenter] removeObserver:self];

}

场景二

有时候在同一个界面里面,可能有多个TextField输入框,而点击不同额输入框,我们可能希望弹出的键盘拥有不同的工具条,这时候我们怎么办呢?

思路

首先我们要有那么几种工具条,可以使用xib方式(简单,不讲解了了,不知道可以发邮件给我)

然后设置不同输入框的配件视图(textField.inputAccessoryView = xxxTool)

设置输入框成为第一响应者,这样弹出的时候就能有不同的toolBar了。

代码实现

//这里不贴图了,比较简单

UIView *tool1 = [[[NSBundle mainBundle] loadNibNamed:@"ToolBar1" owner:nil options:nil] lastObject];

UIView *tool2 = [[[NSBundle mainBundle] loadNibNamed:@"ToolBar2" owner:nil options:nil] lastObject];

self.textField1.inputAccessoryView = tool1;

self.textField2.inputAccessoryView = tool2;

场景三

上面适用的情况是在屏幕底部只有一个输入框的时候。有朋友问到当一个界面有很多个输入框,上面的输入框点击不需要向上移动,只有下面的点击才需要界面上移的时候怎么办?

解决方法

我这里就给出一个解决方案,可能不是最优,希望看到的朋友有更好的方法能够分享给我。- 首先让你的xxxController继承代理

@interface xxxController()@end

 让你希望能够上移的输入框XXXTextField的代理称为控制器本身

self.XXXTextField.delegate = self;

 让控制器监听键盘消失的通知,为的是让键盘消失的时候也能在需要时调整界面的位置

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

实现UITextField的代理方法和键盘的监听方法

- (void)textFieldDidBeginEditing:(UITextField *)textField{

CGRect frame = self.view.frame;

//这里的50是随便设置的

frame.origin.y -=50;

frame.size.height +=50;

self.view.frame = frame;

}

-(BOOL)textFieldShouldReturn:(UITextField *)textField{

CGRect frame = self.view.frame;

frame.origin.y +=50;

frame.size.height -=50;

self.view.frame = frame;

[textField resignFirstResponder];

return YES;

}

-(void)keyBoardWillHideFrame:(NSNotification *)notification{

if (self.view.frame.origin.y == -50) {

CGRect frame = self.view.frame;

frame.origin.y +=50;

frame.size.height -=50;

self.view.frame = frame;

}}

常用知识点:

成为第一响应者(可以调出键盘)

- (BOOL)becomeFirstResponder;

取消第一响应者

- (BOOL)resignFirstResponder;

全部取消第一响应者

- (BOOL)endEditing:(BOOL)force;    //使用这个使得view或者其所有的子视图都取消第一响应者 (optionally force)

相关文章

  • iOS键盘处理

    ios处理键盘 #pragma mark - Keyboard - (void)addKeyboardNoti {...

  • ios H5 input的输入框问题

    处理iOS 微信客户端 键盘收起页面未下移bug 处理iOS 微信客户端 键盘未获焦buginput 上面加上cs...

  • iOS键盘处理

    因为这是好久前的文章了重新整理下进行了排版,现在对于键盘处理可以大家可以直接使用IQKeyboardManager...

  • iOS键盘处理

    一、点击控制器的view退出键盘 通过UIApplication获取:(推荐,随时都可以获取到window) 二、...

  • iOS键盘处理

    场景一 在iOS开发中,我们经常处理这样的情况: 当键盘出现或者消失的时候,我们需要做一些相应的操作。比如键盘上面...

  • v-resetInput

    ios设备微信内调出键盘页面上滚,关闭键盘页面不回位的兼容处理

  • iOS开发实战小知识点(三)——键盘、弹窗

    1、iOS 键盘适配 iOS系统相对于Android系统开发一个需要额外处理的地方:键盘的适配。Android系统...

  • 关于安卓,ios 兼容

    1.处理input focus时被键盘遮挡问题+键盘顶起页面问题+键盘收起以后页面不归位 2.关于IOS下clic...

  • iOS 键盘上处理

    键盘处理的方式有很多种,这里总结出两种一种三方框架,一种通过NSNotificationCenter监听的方式 三...

  • 移动端H5,输入框,软键盘 及 滚动

    1. 软键盘弹起时,输入框在IOS上有部分被软键盘遮挡 处理方法,监听软键盘弹起,即监听input 的focus,...

网友评论

      本文标题:iOS键盘处理

      本文链接:https://www.haomeiwen.com/subject/dratlttx.html