swift 键盘属性与事件
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 键盘属性与事件的更多相关文章
- UITextView: 响应键盘的 return 事件(收回键盘)
UITextView: 响应键盘的 return 事件(收回键盘) 此篇文章将要介绍UITextView: 响应键盘的 return 事件(收回键盘)的相关介绍,具体实例请看下文 UITextView ...
- combobox 属性、事件、方法
一 .combobox 属性.事件.方法公共属性 名称 说明 AccessibilityObject 获取分配给该控件的 AccessibleObject. AccessibleDefaultActi ...
- C#中combobox 控件属性、事件、方法
一 .combobox 属性.事件.方法公共属性 名称 说明 AccessibilityObject 获取分配给该控件的 AccessibleObject. AccessibleDefaultActi ...
- HTML 标准属性 和 事件属性
HTML的公共属性 HTML 和 XHTML 标签支持的标准属性 核心属性 (Core Attributes) 以下标签不提供下面的属性:base.head.html.meta.param.scrip ...
- [转]Delphi 控件属性和事件
常用[属性] Action:该属性是与组件关联的行为,允许应用程序集中响应用户命令 Anchors:与组件连接的窗体的位置点 Align:确定组件的对齐方式 AutoSize:确定组件是否自动调整其大 ...
- HTML 5 全局属性和事件属性
1.HTML 5 全局属性 HTML 属性能够赋予元素含义和语境. 下面的全局属性可用于任何 HTML5 元素. NEW:HTML 5 中新的全局属性. 属性 描述 accesskey 规定访问元素的 ...
- Javascript高级编程学习笔记(64)—— 事件(8)键盘与文本事件
键盘与文本事件 用户在使用键盘时会触发键盘事件 “DOM2级事件”最初规定了键盘事件,但是最后在定稿时又删除了相应内容 所以键盘事件被放入了DOM3级事件的规范中 总的来说有三个键盘事件: keydo ...
- Python全栈开发之路 【第十七篇】:jQuery的位置属性、事件及案例
位置属性 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <titl ...
- javaScript事件(七)事件类型之键盘与文本事件
键盘事件如下: keydown:当用户按下键盘上的任意键时触发,而且如果按住不放的话,会重复触发此事件. keypress:当用户按下键盘上的字符键时触发,而且如果按住不放的话,会重复触发此事件. k ...
随机推荐
- linux下安装安装pcre-8.32
linux下安装安装pcre-8.32 ./configure --prefix=/usr/local/pcre 出现以下错误 configure: error: You need a C++ com ...
- 另类vs2015+xamarin 的android界面乱码 解决
text.Text += "验证key 验证出错! 请在 AndroidManifest.xml 文件中检查 key 设置"; 代码就上面一行,单步走之前text.Text里面是汉 ...
- jquery之实例应用
Query是一个兼容多浏览器的javascript库,核心理念是write less,do more(写得更少,做得更多),对javascript进行了封装,是的更加便捷的开发,并且在兼容性方面十分优 ...
- 错误: 程序包com.sun.istack.internal不存在
eclipse下maven打包是出现如下错误: [ERROR] D:\code-old\daba_user_mvn\src\main\java\com\dada\transaction\service ...
- Three.js开发指南---使用构建three.js的基本组件(第二章)
.gui本章的主要内容 1 场景中使用哪些组件 2 几何图形和材质如何关联 3 正投影相机和透视相机的区别 一,Three所需要的基本元素 场景scene:一个容器,用来保存并跟踪所有我们想渲染的物体 ...
- Code Page 编码
Identifier .NET Name Additional information 037 IBM037 IBM EBCDIC US-Canada 437 IBM437 OEM United St ...
- R语言-数据结构
1.向量 向量是用来存储数值型.字符型或逻辑性数据的一维数组,用函数c()创建向量 a <- c(1,2,5,6,4) b <- c("one","two&q ...
- NHibernate Demo 和 效率测试
本文关于NHibernate的Demo和效率测试,希望对大家有用. 1.先去官网下载Nhibernate 2.放入到项目中并建立Helper类 private static ISession _Ses ...
- Ubuntu下,python输出中文
python教程里说,如果要输出非英语文本就加前缀u或U, 例如: print u"你好啊,祖国" print u"こんにちは.私はとてもいいです" 结果会报错 ...
- Java JIT(Just-In-Time) Compilation
http://www.oracle.com/technetwork/articles/java/architect-evans-pt1-2266278.html