文本框(UITextField)及键盘遮挡处理和回收

文本框属性

官网文档:UITextField Class Reference

以下都是可以在IB中选择设置的,也可以使用代码编写

placeholder :文本提示、提示符【placeholder:占位符】

aligment:对其方式

clear Button:清除按钮

键盘选项

default//默认键盘(没有特殊要求就选它)

keyboardeType:弹出键盘类型(自动的),列举几个陌生的NumbersAndPunctuation//数字和符号键盘

decimal Pad//带小数点的键盘

TypeTwitter//优化的键盘,方便输入@、#等特殊自符

其他若干中键盘方式

capitalization:输入框首字母是否大写

返回健有多种选项:其中emergency call为紧急呼叫

secure Text Entry:输入的字符影藏(像密码框一样)

swift版本编码方式创建文本框:文本框的基本使用

文本框代理和通知

官方文档:UItextFieldDelegateprotocol Reference

文本框代理:

public protocol UITextFieldDelegate : NSObjectProtocol {@available(iOS 2.0, *)optional public func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool // return NO to disallow editing.@available(iOS 2.0, *)optional public func textFieldDidBeginEditing(_ textField: UITextField) // became first responder@available(iOS 2.0, *)optional public func textFieldShouldEndEditing(_ textField: UITextField) -> Bool // return YES to allow editing to stop and to resign first responder status. NO to disallow the editing session to end@available(iOS 2.0, *)optional public func textFieldDidEndEditing(_ textField: UITextField) // may be called if forced even if shouldEndEditing returns NO (e.g. view removed from window) or endEditing:YES called@available(iOS 10.0, *)optional public func textFieldDidEndEditing(_ textField: UITextField, reason: UITextFieldDidEndEditingReason) // if implemented, called in place of textFieldDidEndEditing:@available(iOS 2.0, *)optional public func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool // return NO to not change text@available(iOS 2.0, *)optional public func textFieldShouldClear(_ textField: UITextField) -> Bool // called when clear button pressed. return NO to ignore (no notifications) //清除按钮点击时调用 ,返回NO则忽略清除@available(iOS 2.0, *)optional public func textFieldShouldReturn(_ textField: UITextField) -> Bool // called when 'return' key pressed. return NO to ignore. //返回按钮被点击时,调用,返回true时会自动收起键盘
}

通知监听

文本框的开始和结束编辑,以及文本改变都是通过系统发出通知的。

通知如下:

extension NSNotification.Name {public static let UITextFieldTextDidBeginEditing: NSNotification.Namepublic static let UITextFieldTextDidEndEditing: NSNotification.Namepublic static let UITextFieldTextDidChange: NSNotification.Name
}

可以在该页面监听通知,然后做出处理函数(比如在其中检查某些字段的合法性),

代码如下:

1。首先,注册通知(注意通知的名字是系统定义的,是系统发出的通知)

 NotificationCenter.default.addObserver(self, selector: #selector(checkThePhoneNum), name:.UITextFieldTextDidChange, object: nil)

2.实现检查函数

//电话号码检查func checkThePhoneNum(sender:Notification) -> Void {phoneNumber = self.phoneNum.text!let str = phoneNumber as NSStringif str.length>11 {MBProgressHUD.failtureHUD(message: "电话超过11位", to: self.view)}}

3.取消通知注册

    deinit {NotificationCenter.default.removeObserver(self)}

键盘回收

实现键盘回收,只需要在文本返回(textFieldShouldReturn)方法取消文本框(.resignFirstResponder())的第一响应

通用方法:在上一个视图中添加手势,在手势的Action函数中取消掉相应的文本框的第一相应。

提示:如果遇到模拟器点击文本框时不能显示键盘,在模拟器设置Hardware->KeyBoard->取消Connect hardwarekeyboard

键盘遮挡问题处理

针对文本输入框/视图,编辑时就会调用键盘,如果输入框在屏幕下方很有可能被弹出的键盘给遮挡住。

解决思想:根据是否遮挡输入框,对整个keyWindow是上移,从而避免遮挡,当然,还得使用通知。

具体代码实现(Object-C)

//ll键盘通知【learn】[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(showKeyboard:) name:UIKeyboardWillShowNotification object:nil]; //调用键盘时通知处理  <pre name="code" class="objc">    [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(hideKeyboard:) name:UIKeyboardWillHideNotification object:nil];//键盘回收通知处理
<pre name="code" class="objc">//ll获取通知中心的信息,键盘出现的时候
-(void) showKeyboard:(NSNotification*) noti{NSDictionary *info = [noti userInfo];NSValue *value = [info objectForKey:UIKeyboardFrameBeginUserInfoKey];NSLog(@"输出以下这个集合看看有些什么:%i");for (NSString *key in info) {//集合的遍历NSLog(@"%@:%@",key,[info objectForKey:key]);}CGRect arect = [value CGRectValue];//注意基本数据不用*_height = arect.size.height;NSLog(@"键盘的高度:%f",self.height);
 //思想:通过移动整个UIWindou//1.获取文本框的相对位置CGPoint relationPoint = [self.inputView convertPoint:CGPointZero toView:[UIApplication sharedApplication].keyWindow];//2.计算活动面积高度CGFloat actualHeight = CGRectGetHeight(self.inputView.frame) + relationPoint.y + self.height ;//3.判断是否会发生键盘遮挡问题CGFloat overstep = actualHeight - [UIScreen mainScreen].bounds.size.height;if (overstep>0) {//需要移动CGRect frame = [UIScreen mainScreen].bounds;frame.origin.y -= overstep; //[learn】主屏幕往上移动,初始坐标的y值是负的//获取屏幕方向CGFloat duration = [noti.userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue];//好好研读LL[UIView animateWithDuration:duration delay:0 options:UIViewAnimationOptionCurveLinear animations:^{//4.调整视图[UIApplication sharedApplication].keyWindow.frame = frame;} completion:nil];}

//键盘回收处理,上移部分恢复,

-(void) hideKeyboard: (NSNotification*) noti{CGFloat duration = [noti.userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue];CGRect frame = [UIScreen mainScreen].bounds;[UIView animateWithDuration:duration delay:0 options:UIViewAnimationOptionCurveLinear animations:^{NSLog(@"即将回收见盘");[UIApplication sharedApplication].keyWindow.frame = frame;} completion:nil];}

提示:使用以上代码无法回收键盘?不知道为什么,调用resignFirstspoder总是返回NO值。希望知道的大神评论区告知原因。

UITextField的其他知识:自定义限制输入

【UIKit】文本框(UITextField)及键盘遮挡处理和回收相关推荐

  1. [iOS] UITextField隐藏软键盘心得(隐藏自身软键盘、点击Return自动转到下个文本框、轻触背景隐藏软键盘)...

    作者:zyl910 关于隐藏软键盘,网上的办法良莠不齐,大多是通过实现UITextFieldDelegate来隐藏软键盘,该方法代码较多,且在文本框很多的时不好处理.我经过搜索与摸索,找到了最佳的处理 ...

  2. 全局异步和主线程异步区别、改变PlaceHolder颜色、解决键盘弹起挡住文本框问题...

    1.全局异步执行耗时任务 dispatch_async(dispatch_get_global_queue(0, 0), ^{ }); 2.主线程异步刷新UI dispatch_async(dispa ...

  3. java 文本框输入监听事件_JAVA GUI 事件监听事件 详解 和 案例.

    GUI(图形用户界面) Graphical User Interface(图形用户接口) 用图形的 方式, 来显示 计算机操作的 界面, 这样更方便 更直观. CLI Command Line Use ...

  4. 比较简单的解决键盘遮挡文本框的简单方法

    1.首先需要在控制器的view中添加上一个scrollView,并遵循UITextFieldDelegate代理,并设置文本框的自身代理 2.添加手势监听 UITapGestureRecognizer ...

  5. 混合开发的坑(7) ---输入文本时,键盘遮挡

    CSS绝对定位于底部,输入文本时,键盘遮挡问题. 浏览器  正确 ios 正确 anroid 会遮挡  只能通过js来解决 转载于:https://www.cnblogs.com/huangqiao/ ...

  6. android+点击屏幕隐藏键盘,Android点击EditText文本框之外任何地方隐藏键盘的解决办法...

    1,实现方法一: 通过给当前界面布局文件的父layout设置点击事件(相当于给整个Activity设置点击事件),在事件里进行键盘隐藏 android:id="@+id/traceroute ...

  7. [html] android手机的微信H5弹出的软键盘挡住了文本框,如何解决?

    [html] android手机的微信H5弹出的软键盘挡住了文本框,如何解决? window.addEventListener("resize", function () {if ...

  8. tableView cell 中如果有文本框点击自动滚动不被键盘挡住

    tableView cell 中如果有文本框点击自动滚动不被键盘挡住 tableView 是继承UIscrollView,所以自然有setContentOffset方法,该方法可以设置tableVie ...

  9. 文本框的值默认显示文本域上_13.4.4 键盘与文本事件

    用户在使用键盘时会触发键盘事件."DOM2 级事件"最初规定了键盘事件,但在最终定稿之前又删除了相应的内容.结果,对键盘事件的支持主要遵循的是 DOM0 级. "DOM3 ...

最新文章

  1. linux文件夹加密访问,技术|Linux系统上用encfs创建和管理加密文件夹
  2. C和C++中的默认类型
  3. 开发人员如何了解用户和需求
  4. Winform 进度条
  5. [Python] L1-030. 一帮一-PAT团体程序设计天梯赛GPLT
  6. 等压线上怎么画风向_圣诞贺卡怎么写?向你爱的人送上最有温度的祝福吧!
  7. 将后台的返回的格式,根据某个共同的字段分组
  8. Strategy模式的一点思考
  9. 张家界和桂林的旅游纪实(避坑指南)
  10. KV杀毒软件创始人离世
  11. 手机端分页 php,网站开发-php开发手机论坛(9)-分页显示评论
  12. ##iOS中的微信支付 支付验证签名失败
  13. 淘宝商城,亚洲最大网上购物网站
  14. flutter 复制粘贴默认英文显示问题
  15. 浅谈Android相机演变
  16. 如何获取百度地图API
  17. 计算机培训ppt教案,课件制作的教案
  18. 22222222222
  19. 机器学习梯度下降法应用波士顿房价预测
  20. JAVA日记之SpringAOP_XML配置与注解开发 ----喝最烈的酒.

热门文章

  1. protobuf + maven 爬坑记
  2. Java程序的运行原理及JVM的启动是多线程的吗?
  3. 【源资讯 第37期】一个时代的终结 —— 再见, Flash !
  4. iOS6.0下获取通讯录用户列表
  5. fMRI在认知心理学上的研究
  6. 深入理解Java中的final关键字
  7. TCP超时与重传机制与拥塞避免
  8. HDFS源码分析心跳汇报之数据结构初始化
  9. 老子《道德经》第四十六章
  10. Android开发之布局--RelativeLayout布局