Swift(十九)UITextField

更新:2018.05.24

整理了一下demo:SwiftDemo


一般在APP中,遇到的登录注册之类的输入框,基本都是使用的控件UITextFieldUITextField足够强大和灵活,它拥有提示语、密码输入、清除功能以及键盘样式设置,更方便开发与使用。

  • UITextFiled是一个可编辑的文本区域,它可以收集通过键盘输入或剪切板黏贴的数据。
  • UITextFieldUIControl的子类,所以它也拥有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去扩展自身。

Swift(十九)UITextField_第1张图片

例如微信中的添加银行卡页面,输入框右面的两个按钮,就是将按钮放在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

Swift(十九)UITextField_第2张图片

a. 这里设置了 leftViewrightView 都是一直显示的,可根据实际情况自己设置
b. 可以看出定义了两个按钮,分别等于 leftViewrightView
c. 可以试一下修改两个Butotn的位置是没有用的。

3. UITextFieldDelegate

  1. 首先要添加协议头


    Swift(十九)UITextField_第3张图片
  2. 然后
textField.delegate = self
  1. 最后 实现代理方法
    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
    }

Swift(十九)UITextField_第4张图片

a. print的内容就是代理方法的作用,这里就不一一解释了。

你可能感兴趣的:(Swift(十九)UITextField)