更新:2018.05.24
整理了一下demo:SwiftDemo
一般在APP中,遇到的登录注册之类的输入框,基本都是使用的控件UITextField
,UITextField
足够强大和灵活,它拥有提示语、密码输入、清除功能以及键盘样式设置,更方便开发与使用。
-
UITextFiled
是一个可编辑的文本区域,它可以收集通过键盘输入或剪切板黏贴的数据。 -
UITextField
是UIControl
的子类,所以它也拥有Target-Action的机制,但它也提供了代理模式,这两种模式都可以检测到文本输入的整个过程。 -
UITextField
的键盘(keyboard)是可以配置的,支持多种输入形式,如普通文本键盘、邮箱键盘、数字键盘等。
1. 创建UITextField
// 创建UITextField
let textField = UITextField(frame: rect)
// 背景颜色
textField.backgroundColor = UIColor.white
// 边框样式
textField.borderStyle = UITextBorderStyle.roundedRect
// 提示语
textField.placeholder = "请输入您的邮箱地址"
// 自动更正功能
textField.autocorrectionType = UITextAutocorrectionType.no
// 完成按钮样式
textField.returnKeyType = UIReturnKeyType.done
// 清除按钮显示状态
textField.clearButtonMode = UITextFieldViewMode.whileEditing
// 键盘样式
textField.keyboardType = UIKeyboardType.emailAddress
// 键盘外观
textField.keyboardAppearance = UIKeyboardAppearance.alert
// 安全文本输入,(输入密码)
textField.isSecureTextEntry = false
view.addSubview(textField)
- 首先我们创建了一个
UITextField
,设置背景颜色为白色,borderStyle的作用是设置边框样式,由枚举UITextBorderStyle控制:
UITextBorderStyle属性 | 描述 |
---|---|
none |
无边框 |
line |
直角矩形边界线 |
bezel |
有阴影的边框 |
roundedRect |
圆角矩形边框 |
-
placeHolder
是提示文本,一般在输入框没有任何输入的时候显示 -
autocorrectionType
的作用是设置时候开启文字自动修复功能,这个貌似只对英文有效,有兴趣的可以试一下,由UITextAutocorrectionType控制,有三个值:default、yes、no
-
returnType
属性用来控制键盘返回键的样式(只能控制样式,不能修改方法,修改方法可以去代理中设置),通过枚举UIReturnKeyType控制:
UIReturnKeyType属性 | 描述 |
---|---|
default |
默认,标有Return |
go |
标有Go的按钮 |
google |
标有Google的按钮 |
next |
标有Next的按钮,中文键盘是'下一步' |
route |
标有Route的按钮 |
search |
标有Search的按钮,中文键盘是'搜索' |
send |
标有Send的按钮,中文键盘是'发送' |
yahoo |
标有Yahoo!的按钮 |
done |
标有Done的按钮,中文键盘是‘完成’ |
emergencyCall |
紧急呼叫按钮 |
continue |
标有Continue的按钮,中文键盘是‘继续’ |
-
clearButtonMode
的作用是控制右侧清除按钮什么时候显示,由枚举** UITextFieldViewMode**控制:
UITextFieldViewMode属性 | 描述 |
---|---|
never |
从不出现 |
whileEditing |
开始编辑时出现 |
unlessEditing |
除了编辑外都出现 |
always |
一直出现 |
-
keyboardType
属性的作用是控制键盘的显示样式,由枚举UIKeyboardType控制:
UIKeyboardType属性 | 描述 |
---|---|
default |
默认键盘:支持所有字符 |
asciiCapable |
支持ASCII的默认键盘 |
numbersAndPunctuation |
标准电话键盘,支持+*#等符号 |
URL |
URL键盘,有.com按钮;只支持URL字符 |
numberPad |
数字键盘 |
phonePad |
电话键盘 |
namePhonePad |
电话键盘,也支持输入人名字 |
emailAddress |
用于输入电子邮件地址的键盘 |
asciiCapableNumberPad |
支持ASCII的数字键盘 |
decimalPad |
带‘.’的数字键盘 |
twitter |
功能齐全键盘,类似asciiCapable |
webSearch |
带有面向url的附加的默认键盘类型 |
-
keyboardAppearance
,定义的是键盘的样式,由枚举UIKeyboardAppearance控制:
UIKeyboardAppearance属性 | 描述 |
---|---|
default |
白色,这个字段是为了兼容以前的版本 |
dark |
黑色 |
light |
白色 |
alert |
黑色,这个字段是为了兼容以前的版本 |
- 当
isSecureTextEntry
属性设置为true时,输入的内容将会变成黑色原点,一般在输入密码时使用。
2.UITextField的浮动视图(Overlay view)
UITextField本身还可以使用Overlay View去扩展自身。
例如微信中的添加银行卡页面,输入框右面的两个按钮,就是将按钮放在UITextField的rightView中。这样就能将UITextField和UIButton很好的结合在一起。
textField.leftViewMode = .always
textField.rightViewMode = .always
let leftButton = UIButton(type: .infoDark)
leftButton.frame = CGRect(x: 0, y: 0, width: 30, height: 30)
textField.leftView = leftButton
let rightButton = UIButton(type: .contactAdd)
rightButton.frame = CGRect(x: 0, y: 0, width: 30, height: 30)
textField.rightView = rightButton
a. 这里设置了
leftView
和 rightView
都是一直显示的,可根据实际情况自己设置b. 可以看出定义了两个按钮,分别等于
leftView
和 rightView
c. 可以试一下修改两个Butotn的位置是没有用的。
3. UITextFieldDelegate
-
首先要添加协议头
- 然后
textField.delegate = self
- 最后 实现代理方法
func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
print("将要开始编辑")
return true
}
func textFieldDidBeginEditing(_ textField: UITextField) {
print("已经开始编辑")
}
func textFieldShouldEndEditing(_ textField: UITextField) -> Bool {
print("将要结束编辑")
return true
}
func textFieldDidEndEditing(_ textField: UITextField) {
print("已经结束编辑")
}
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
print("文本输入内容将要发生变化(每次输入都会调用)")
return true
}
func textFieldShouldClear(_ textField: UITextField) -> Bool {
print("将要清除输入内容,返回值是是否要清除掉内容")
return true
}
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
print("将要按下Return按钮,返回值是是否结束输入(是否失去焦点)")
return true
}
a. print的内容就是代理方法的作用,这里就不一一解释了。