原创首发
UIKit快速入门之UITextView 与 UITextField(5)
UITextView 与 UITextField
知识点
在iOS中,文本输入框,有两个UITextView 与 UITextField。
用于不同的场景,大部分属性和方法相同,但是也有一些区别,先说结论:
- UITextView用于多行文本,可以滚动输入的内容
-
UITextField用于单行文本,如输入用户名或密码等
-
TextField支持placeholder
-
TextView不支持placeholder,通常需要自定义实现
-
TextField按返回键表示退出编辑
- TextView按返回键表示换行,可以判断是否是换行隐藏键盘,退出编辑
实战代码
具体使用效果如下:
方法和属性还是蛮多的,直接看代码注释吧:
class ViewController: UIViewController, UITextViewDelegate, UITextFieldDelegate {
//创建UITextView对象
let textView = UITextView(frame:CGRect(x: 10, y: 64, width: 300, height: 100))
//创建UITextField对象
let textField = UITextField(frame: CGRect(x: 10, y: 200, width: 300, height: 40))
override func viewDidLoad() {
super.viewDidLoad()
//init TextView
initTextView()
//init TextField
initTextField()
}
func initTextView() {
//添加到视图上
view.addSubview(textView)
//背景颜色设置
textView.backgroundColor = UIColor(red: 0.82, green: 0.82, blue: 0.82, alpha: 0.6)
//设置textview里面的字体颜色
textView.textColor = UIColor.black
//设置文本字体,使用系统默认字体,指定18号字号
textView.font = UIFont.systemFont(ofSize: 18)
//设置显示内容
textView.text = "我是TextView,我是多行TextView,\n 会滚动的的TextView哦, 我是TextView,我是多行TextView,会滚动的的TextView哦,"
//文本对齐方式, 一般都是左对齐吧
textView.textAlignment = .left
//设置圆角,比较常用
textView.layer.cornerRadius = 10
textView.layer.masksToBounds = true
//是否允许进行编辑, 当为fasle时,是无法获取光标的,只能选择、复制等非编辑操作
textView.isEditable = true
//是否可以滚动,默认为true
textView.isScrollEnabled = true
//键盘类型
textView.keyboardType = .default
// 返回键的类型,比较有用
textView.returnKeyType = .done
//自适应高度
textView.autoresizingMask = .flexibleHeight
//设置内边距
textView.textContainerInset = UIEdgeInsets(top: 8, left: 10, bottom: 8, right: 4)
//指定代理
textView.delegate = self
// 监听输入
NotificationCenter.default.addObserver(self,
selector:#selector(self.textDidChange),
name: UITextView.textDidChangeNotification,
object: nil)
}
@objc
func textDidChange() {
print("正在输入…………")
}
// 键盘处理
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
//某个textview或view失去了响应者,即收起键盘了
self.textView.resignFirstResponder()
self.textField.resignFirstResponder()
//或注销当前view(或它下属嵌入的text fields)的first responder 状态,即可关闭其子控件键盘
//self.view?.endEditing(false)
}
// 监听输入字符,获取当前输入值
// 并通过判断textView点击return(换行)是否是换行,可以结束编辑,即关闭键盘
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
print(text)
print(textView.text ?? "")
if text == "\n" {
self.view?.endEditing(false)
return false
}
//字数限制,在这里我的处理是给了一个简单的提示,
if range.location >= 100 {
print("超过100字了,无法继续输入了")
return false
}
return true
}
// ------------------------------------ TextField ----------------------
func initTextField() {
//添加到视图上
view.addSubview(textField)
//无边框:none,直线边框:line,圆角矩形边框:roundedRect,边框+阴影:bezel
textField.borderStyle = .roundedRect
//设置TTextField提示文字
textField.placeholder = "请输入用户名"
//TextField密码输入框,用于输入密码
textField.isSecureTextEntry = true
//使TextField在界面打开时就获取焦点,并弹出输入框
textField.becomeFirstResponder()
//使TextField失去焦点,并收回键盘
//textField.resignFirstResponder()
//将代理设置本控制器,并在class加入UITextFieldDelegate
textField.delegate = self
// 其它属性和方法,类似TextView,可以参考
}
}
其它
不仅仅如此!
TextView还支持插入图片,给文字中的电话号码和网址自动加链接,自定义选择菜单,选择文本后分享等等