1、键盘的类型

        textField1.keyboardType = UIKeyboardType.default  //系统默认的虚拟键盘
textField1.keyboardType = UIKeyboardType.asciiCapable //显示英文字母的虚拟键盘
textField1.keyboardType = UIKeyboardType.numbersAndPunctuation //显示数字和标点的虚拟键盘
textField1.keyboardType = UIKeyboardType.URL //显示便于输入数字的虚拟键盘
textField1.keyboardType = UIKeyboardType.numberPad //显示便于输入数字的虚拟键盘
textField1.keyboardType = UIKeyboardType.phonePad //显示便于拨号呼叫的虚拟键盘
textField1.keyboardType = UIKeyboardType.namePhonePad //显示便于聊天拨号的虚拟键盘
textField1.keyboardType = UIKeyboardType.emailAddress //显示便于输入Email的虚拟键盘
textField1.keyboardType = UIKeyboardType.decimalPad //显示用于输入数字和小数点的虚拟键盘
textField1.keyboardType = UIKeyboardType.twitter //显示方便些Twitter的虚拟键盘
textField1.keyboardType = UIKeyboardType.webSearch //显示便于在网页上书写的虚拟键盘
textField1.keyboardType = UIKeyboardType.asciiCapableNumberPad //显示便于输入数字的虚拟键盘 只支持iOS10
textField1.keyboardType = UIKeyboardType.alphabet //字母键盘 已弃用

2、键盘的外观

       textField1.keyboardAppearance = .default //默认外观:浅灰色
textField1.keyboardAppearance = .dark //黑色
textField1.keyboardAppearance = .light //亮色,与Default很相似

3、键盘的回车键

        textField1.returnKeyType = .default //默认:灰色按钮,标有Return
textField1.returnKeyType = .continue // 标有Continue的蓝色按钮
textField1.returnKeyType = .done //标有Done的蓝色按钮
textField1.returnKeyType = .emergencyCall //紧急呼叫按钮
textField1.returnKeyType = .go //标有Go的蓝色按钮
textField1.returnKeyType = .google //标有Google的蓝色按钮,用于搜索
textField1.returnKeyType = .join //标有Join的蓝色按钮
textField1.returnKeyType = .next //标有Next的蓝色按钮
textField1.returnKeyType = .route //标有Route的蓝色按钮
textField1.returnKeyType = .search //标有Search的蓝色按钮
textField1.returnKeyType = .send //标有Send的蓝色按钮
textField1.returnKeyType = .yahoo //标有Yahoo!的蓝色按钮,用于搜索

4、键盘的回车键

        textField1.autocorrectionType = .default  //默认
textField1.autocorrectionType = .no //不自动更正
textField1.autocorrectionType = .yes //自动更正

5、键盘的安全性

        textField1.isSecureTextEntry = true //输入密码

6、回收键盘

     //按return回收键盘
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
} //点击空白回收键盘
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
self.view.endEditing(true)
}

7、键盘的事件 监听键盘的弹出和消失,避免遮挡输入框

只能说这里坑太多了,是真的太多了,和2.0差别太大,不说了坑太多了,上代码

    //Mark:Delegate
func textFieldDidBeginEditing(_ textField: UITextField) {
//监听键盘弹出通知
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow(notification:)), name: NSNotification.Name.UIKeyboardWillShow, object: nil)
//监听键盘收回通知
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide(notification:)), name: NSNotification.Name.UIKeyboardWillHide, object: nil)
}
func textFieldDidEndEditing(_ textField: UITextField) {
self.view.endEditing(true) } //键盘显示
func keyboardWillShow(notification:NSNotification) { let textMaxY = self.textField1!.frame.maxY // 取到输入框的最大的y坐标值 let userinfo: NSDictionary = notification.userInfo! as NSDictionary let nsValue:AnyObject? = userinfo.object(forKey: UIKeyboardFrameEndUserInfoKey) as AnyObject? let keyboardY = nsValue?.cgRectValue.origin.y //取到键盘的y坐标 // 设置动画 let duration = 2.0 UIView.animate(withDuration: duration) { () -> Void in
if (textMaxY > keyboardY!) {
self.view.transform = CGAffineTransform(translationX: 0, y: keyboardY! - textMaxY - 10)
}else{
//view.transform = CGAffineTransformIdentity;线性代数里面讲的矩阵变换,这个是恒等变换当 你改变过一个view.transform属性或者view.layer.transform的时候需要恢复默认状态的话,记得先把他们重置可以使用view.transform = CGAffineTransformIdentity,或者view.layer.transform = CATransform3DIdentity,
self.view.transform = CGAffineTransform.identity
}
}
}
//键盘隐藏
func keyboardWillHide(notification:NSNotification){ UIView.animate(withDuration: 2.0) { () -> Void in
self.view.transform = CGAffineTransform.identity
} }

这里只是简单的写法,在正式的项目中,请各位判断是否需要进行动画操作,当然这并不会影响最终的效果,但是对性能会造成一定的影响

下面贴出他到底有多坑:你搜索出来的获取键盘弹出的高度的结果一定是这样的:

let userinfo: NSDictionary = aNotification.userInfo!

let nsValue = userinfo.objectForKey(UIKeyboardFrameEndUserInfoKey)

let keyboardRec = nsValue?.CGRectValue()

let height = keyboardRec?.size.height

文/其所以然(简书作者)
原文链接:http://www.jianshu.com/p/49edd72e07a5
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

这是2.0的写法,转换成3.0是这样的

 let textMaxY = self.textField1!.frame.maxY

 let userinfo: NSDictionary = notification.userInfo! as NSDictionary

 let nsValue = userinfo.object(forKey: UIKeyboardFrameEndUserInfoKey)

 let keyboardRec = (nsValue as AnyObject).cgRectValue

 let height = keyboardRec?.size.height

然后你会发现 height一直是nil 对啊 一直是nil啊  ,你怎么操作啊,傻逼了吧。原因到底是什么呢?    。。。。。不知道

或者你搜索出来的结果是这样的 :

  let keyboardH : CGFloat? = (((notification.userInfo![UIKeyboardFrameEndUserInfoKey] as AnyObject).cgRectValue?.size.height))

其实是第一种结果的简写,这样依旧获取不到键盘的高度。

具体这两种写法的区别在哪里导致获取不到键盘的高度的,知道的小伙伴还请分享一下,在下也是3.0的菜鸟

swift 键盘属性与事件的更多相关文章

  1. UITextView: 响应键盘的 return 事件(收回键盘)

    UITextView: 响应键盘的 return 事件(收回键盘) 此篇文章将要介绍UITextView: 响应键盘的 return 事件(收回键盘)的相关介绍,具体实例请看下文 UITextView ...

  2. combobox 属性、事件、方法

    一 .combobox 属性.事件.方法公共属性 名称 说明 AccessibilityObject 获取分配给该控件的 AccessibleObject. AccessibleDefaultActi ...

  3. C#中combobox 控件属性、事件、方法

    一 .combobox 属性.事件.方法公共属性 名称 说明 AccessibilityObject 获取分配给该控件的 AccessibleObject. AccessibleDefaultActi ...

  4. HTML 标准属性 和 事件属性

    HTML的公共属性 HTML 和 XHTML 标签支持的标准属性 核心属性 (Core Attributes) 以下标签不提供下面的属性:base.head.html.meta.param.scrip ...

  5. [转]Delphi 控件属性和事件

    常用[属性] Action:该属性是与组件关联的行为,允许应用程序集中响应用户命令 Anchors:与组件连接的窗体的位置点 Align:确定组件的对齐方式 AutoSize:确定组件是否自动调整其大 ...

  6. HTML 5 全局属性和事件属性

    1.HTML 5 全局属性 HTML 属性能够赋予元素含义和语境. 下面的全局属性可用于任何 HTML5 元素. NEW:HTML 5 中新的全局属性. 属性 描述 accesskey 规定访问元素的 ...

  7. Javascript高级编程学习笔记(64)—— 事件(8)键盘与文本事件

    键盘与文本事件 用户在使用键盘时会触发键盘事件 “DOM2级事件”最初规定了键盘事件,但是最后在定稿时又删除了相应内容 所以键盘事件被放入了DOM3级事件的规范中 总的来说有三个键盘事件: keydo ...

  8. Python全栈开发之路 【第十七篇】:jQuery的位置属性、事件及案例

    位置属性 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <titl ...

  9. javaScript事件(七)事件类型之键盘与文本事件

    键盘事件如下: keydown:当用户按下键盘上的任意键时触发,而且如果按住不放的话,会重复触发此事件. keypress:当用户按下键盘上的字符键时触发,而且如果按住不放的话,会重复触发此事件. k ...

随机推荐

  1. java中的反射,知道类名创建类,还可以设置私有属性的值

    刚刚学到了反射,感觉反射的功能好强大,所以想写篇博客记录下自己的学习成果. 利用反射来创建对象. Class c1=Class.forName("test.Person");//通 ...

  2. 如何导出和导入mysql数据(数据迁移)

    . 导出数据库数据 mysqldump -uroot -p dp_db > dumpout.sql 其中 root是账户名 dp_db是需要导出的数据库名称 dumpout.sql存储导出的数据 ...

  3. 欢迎你,phpWeChat 开发者

    感谢您使用 phpWeChat 来作为自己网站或者微信公共号的开发工具.phpWeChat 是一款高效.稳定的网站+微信公共号内容管理系统(CMS),也可称之为一个PHP开发框架. phpWeChat ...

  4. 如何在 IDEA 中使用Maven 及 相应插件

    1,Maven 面板 Root ,相当于 VS 中的 sln ? ,大概可以这样理解吧. clean  --> install  这样操作, 所有的项目都会被执行. 手工操作有点麻烦.换另一种方 ...

  5. python-语句

    assert语句 用来声明某个条件是真的.例如,如果你非常确信某个你使用的列表中至少有一个元素,而你想要检验这一点,并且在它非真的时候引发一个错误,那么assert语句是应用在这种情形下的理想语句.当 ...

  6. netflix:Conductor微服务编排引擎

    项目地址: https://github.com/Netflix/conductor Conductor 是 Netflix 受需要运行全球流媒体业务流程的启发,构建的基于云的微服务编排引擎. Con ...

  7. 【原创】关于不同分支代码的Merge有了透彻的理解

    多分支开发,Merge是一个绕不过的话题,不管是Git还是SVN,公司用的是SVN,之前对于SVN的Merge没有很好的研究,出了些状况,这个问题不解决,顺畅地进行多分支开发就是海市蜃楼,下定决心把这 ...

  8. 自动化运维web环境搭建:Nginx+Django+uwsgi

    参考资料: http://lovelace.blog.51cto.com/1028430/1600594 http://www.cnblogs.com/xiongpq/p/3381069.html 安 ...

  9. WinForm中使用XML文件存储用户配置及操作本地Config配置文件(zt)

    因项目中采用CS结构读取Web.config文件,故参照一下的连接完成此功能,在此感谢原作者! 原文地址: http://www.cnblogs.com/zfanlong1314/p/3623622. ...

  10. Play with docker 1.12

    Docker v1.12 brings in its integrated orchestration into docker engine. Starting with Docker 1.12, w ...