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. ExtJs 学习之开篇(二) Observable 给类添加监听

    html:代码 DOCTYPE html><html><head><meta charset="UTF-8"><title>I ...

  2. formData上传图片

    ---------------------formData上传图片--------------------- <form id="imageform"> <img ...

  3. REPEATABLE-READ下批量更新数据的问题

    1. 当前mysql的隔离级别 REPEATABLE-READ 2. 用户读取的时候或者更改的时候(通过事务)   会对 更改的数据加行锁 和 gap锁 , 最终更改完毕后 去掉锁. (行锁表示这条数 ...

  4. 如何用BarTender批量打印标签

    关于使用BarTender条码打印软件打印标签,很多小伙伴最关心的问题之一,莫过于如何实现BarTender批量打印标签.为了提高日常标签打印速度,为了方便快捷,也为了减少出错率,快来跟小编学习学习吧 ...

  5. linux 删除进程的多种方法

    kill pid kill -9 pid kill -15 pid pkill -f *.php kill -s 9 pid

  6. 得到APP【每天听本书】微信交流群(每天更新)

    得到APP[每天听本书]微信交流群,每天更新下载学习资料 添加个人微信号:zhidu10000 进入微信群. “坚持每天读一本书,每天进步1.01,每年进步37.8倍” 2016年书单合辑点此链接,查 ...

  7. 【转】IE8浏览器无法保存Cookie的解决方法

    转自:http://blog.csdn.net/sjsm2007/article/details/17958145 使用IE8浏览器经常出现了无法保存Cookie的故障.每次打开网站需要重新登录,登录 ...

  8. web前端响应式

    一.响应式概述: 不仅仅是通过屏幕尺寸来动态改变页面容器的宽度等,完整的响应式网站的实现需要考虑到这些问题:响应式布局.响应式html和css.响应式媒体.响应式javascript. 二.移动端布局 ...

  9. 5. Longest Palindromic Substring

    Given a string S, find the longest palindromic substring in S. You may assume that the maximum lengt ...

  10. NC57银行档案和客商银行账号为建行04 UPDATE

    第二步 银行档案 update bd_bankdoc set bankdoccode='04N'|| bankdoccode , pk_banktype='0001ZZ1000000001OCUD' ...