键盘遮挡输入框处理

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px "PingFang SC"; color: #008400 }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #3e1e81 }
p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000 }
span.s1 { font: 11.0px Menlo; color: #000000 }
span.s2 { font: 11.0px Menlo }
span.s3 { }
span.s4 { color: #000000 }
span.s5 { color: #703daa }
span.s6 { color: #ba2da2 }
span.s7 { color: #3e1e81 }
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000 }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #3e1e81 }
p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000; min-height: 13.0px }
p.p4 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #703daa }
p.p5 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px "PingFang SC"; color: #008400 }
p.p6 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #31595d }
span.s1 { }
span.s2 { color: #ba2da2 }
span.s3 { color: #000000 }
span.s4 { color: #703daa }
span.s5 { color: #d12f1b }
span.s6 { font: 11.0px "PingFang SC"; color: #d12f1b }
span.s7 { color: #4f8187 }
span.s8 { color: #3e1e81 }
span.s9 { font: 11.0px Menlo; color: #000000 }
span.s10 { font: 11.0px Menlo }
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #4f8187 }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #ba2da2 }
p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000 }
span.s1 { color: #ba2da2 }
span.s2 { color: #000000 }
span.s3 { }
span.s4 { color: #703daa }

1.定义一个记录光标底部的成员变量cursorBottom

2.监听键盘出现和键盘消失通知(记得在dealloc方法中 移除监听器)

3.在UITextField的代理方法textFieldShouldBeginEditing:中转换当前输入框的原点坐标到scrollView中的坐标,计算光标底部坐标并保存

4.在监听键盘出现执行方法中计算 需不需要滚动及滚动大小,动画实现滚动

5.在监听键盘消失方法和点击空白处方法,关闭键盘

主要实现代码如下:

@interface AddAccountViewController ()<UITextFieldDelegate>

@property (nonatomic, assign) CGFloat  cursorBottom;

@end

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000 }
span.s1 { color: #ba2da2 }
span.s2 { }

@implementation AddAccountViewController

- (void)viewDidLoad {

[super viewDidLoad];

self.scrollView = [[UIScrollView alloc] initWithFrame:self.view.bounds];

self.scrollView.backgroundColor = self.view.backgroundColor;

[self.scrollView addGestureRecognizer:[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(hiddenKeyboard)]];

[self.view addSubview:self.scrollView];

//注册键盘出现的通知

[[NSNotificationCenter defaultCenter] addObserver:self

selector:@selector(keyboardWillShow:)

name:UIKeyboardWillShowNotification object:nil];

//注册键盘消失的通知

[[NSNotificationCenter defaultCenter] addObserver:self

selector:@selector(keyboardWillHide:)

name:UIKeyboardWillHideNotification object:nil];

[self setupAccountInfo];

}

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000 }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #3e1e81 }
span.s1 { }
span.s2 { color: #ba2da2 }
span.s3 { color: #000000 }
span.s4 { color: #703daa }

- (void)dealloc

{

[[NSNotificationCenter defaultCenter] removeObserver:self];

}

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #78492a }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000 }
p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000; min-height: 13.0px }
p.p4 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #ba2da2 }
span.s1 { }
span.s2 { color: #ba2da2 }
span.s3 { color: #703daa }
span.s4 { color: #3e1e81 }
span.s5 { color: #272ad8 }
span.s6 { color: #4f8187 }
span.s7 { color: #000000 }
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #78492a }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000 }
p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000; min-height: 13.0px }
p.p4 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #ba2da2 }
p.p5 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px "PingFang SC"; color: #008400 }
p.p6 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #703daa }
p.p7 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #008400 }
p.p8 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #3e1e81 }
span.s1 { }
span.s2 { color: #ba2da2 }
span.s3 { color: #703daa }
span.s4 { color: #3e1e81 }
span.s5 { color: #272ad8 }
span.s6 { color: #4f8187 }
span.s7 { color: #000000 }
span.s8 { font: 11.0px "PingFang SC" }
span.s9 { font: 11.0px Menlo }
span.s10 { font: 11.0px Menlo; color: #000000 }

#pragma mark UITextFieldDelegate

-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField

{

CGPoint point = [textField convertPoint:CGPointMake(0, 0) toView:_scrollView];

self.cursorBottom = textField.height+point.y ;

return YES;

}

#pragma mark 键盘代理事件

///键盘显示事件

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

//获取键盘高度,在不同设备上,以及中英文下是不同的

CGFloat kbHeight = [[notification.userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size.height;

//计算出键盘顶端到inputTextView panel底端的距离(加上自定义的缓冲距离INTERVAL_KEYBOARD)

CGFloat offset =  self.cursorBottom + kbHeight - self.view.height;

// 取得键盘的动画时间,这样可以在视图上移的时候更连贯

double duration = [[notification.userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue];

//将视图上移计算好的偏移

if(offset > 0) {

[UIView animateWithDuration:duration animations:^{

self.scrollView.contentOffset = CGPointMake(0, offset);

}];

}

}

///键盘消失事件

- (void) keyboardWillHide:(NSNotification *)notify {

// 键盘动画时间

double duration = [[notify.userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue];

//视图下沉恢复原状

[UIView animateWithDuration:duration animations:^{

self.scrollView.contentOffset = CGPointMake(0, 0);

}];

}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event

{

[self.view endEditing:YES];

}

- (void)hiddenKeyboard

{

[self.view endEditing:YES];

}

@end

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #78492a }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px "PingFang SC"; color: #008400 }
p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000 }
p.p4 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #703daa }
p.p5 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000; min-height: 13.0px }
p.p6 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #008400 }
p.p7 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #3e1e81 }
span.s1 { }
span.s2 { font: 11.0px "PingFang SC" }
span.s3 { font: 11.0px Menlo }
span.s4 { color: #ba2da2 }
span.s5 { color: #703daa }
span.s6 { font: 11.0px Menlo; color: #000000 }
span.s7 { color: #000000 }
span.s8 { color: #3e1e81 }
span.s9 { color: #4f8187 }
span.s10 { color: #272ad8 }

时间: 2024-10-12 11:49:10

键盘遮挡输入框处理的相关文章

iOS- UITextView与键盘回收与键盘遮挡输入框

一.UITextView 可以实现多行输入的文本框,基本属性与UITextField相似,可以输入多行,可以滚动.UITextView还有个代理方式- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text 可以控制输入文字的数量,较为常用 #pragma mark UITextView的代理方法 //是否可以开始编辑 - (BOOL

React-native键盘遮挡输入框问题的解决

RN中要解决键盘遮挡输入框的问题其实有挺多方式,在这里只是记录其中的一些个人实际开发中使用到的. 方式一.使用scrollTo方法,这也是最简单最粗暴的,只是需要计算scrollview滚动的距离,并且处理一些体验的bug问题.大致思路是:组件render方法中使用scrollview,并且设置scrollview的keyboardShouldPersistTaps={true}(此步一定不能少,如果缺少该属性,接下来的一步将会不起作用),然后在scrollview中用一个view作为conta

LinearLayout详解四:彻底解决软键盘遮挡输入框的问题

之前把预备知识都介绍完了,话说学以致用,接下来我们要通过重载LinearLayout类来解决软键盘覆盖的问题. 首先阐述一下这个问题,如下图所示: 然后看挡住输入框的情况 然后我们给出xml的源代码: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:lay

iOS键盘遮挡输入框,输入区域自动上移

在iOS开发过程当中,遇到关于键盘遮挡输入框的问题,经过网络参考与实践,总结如下: 登录窗口,上下放置两个UITextField,一个用户名,一个密码,放置的在屏幕下方1/3处,当点击用户名时,自动弹出键盘,正好挡住了输入框 解决思路: 1.BLoginViewController 实现UITextViewDelegate的方法 1 //实现了UITextFieldDelegate中的方法,当对TextField进行编辑即键盘弹出时,自动将输入框上移 2 -(BOOL)textFieldShou

react-native 键盘遮挡输入框

Android上已经自动对键盘遮挡输入框做了处理,所以我们只需要关注ios. 1.首先引入 KeyboardAvoidingView import { KeyboardAvoidingView } from 'react-native'; 2.然后在页面的最外层加上 KeyboardAvoidingView render(){ return <KeyboardAvoidingView behavior={'padding'} style={{flex: 1}}> {/*具体页面内容*/} &l

安卓H5软键盘遮挡输入框

<div class="label"> * <span><?php echo lang('receive_email_info'); ?></span> <input class="r-email" type="text" placeholder="<?php echo lang('please_in_receive_email'); ?>3333"> &

解决键盘遮挡输入框的问题

1)首先得遵守协议UITextFieldDelegate @interface userInfoViewController()<UITextFieldDelegate> 2)设置代理(下面的self都是输入框所在的父view) textField.delegate = self; 3)实现UITextFieldDelegate的三个方法即可: - (BOOL)textFieldShouldReturn:(UITextField *)textField {     [textField res

Android WebView中软键盘会遮挡输入框相关问题

要想实现这样的软键盘出现的时候会自己主动把输入框的布局顶上去的效果,须要设置输入法的属性,有下面两种设置方式: 一.在java代码中设置例如以下: getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE| WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN); 二.在androidmanifest.xml中设置与其相应的activity的属性

『零行代码』解决键盘遮挡问题(iOS)

关注仓库,及时获得更新:iOS-Source-Code-Analyze https://github.com/draveness/iOS-Source-Code-Analyze Follow: Draveness · Github 这篇文章会对 IQKeyboardManager 自动解决键盘遮挡问题的方法进行分析. 最近在项目中使用了 IQKeyboardManager 来解决 UITextField 被键盘遮挡的问题,这个框架的使用方法可以说精简到了极致,只需要将 IQKeyboardMan