iOSiOS 开发每天分享优质文章Swift 专栏

Swift(十九)UITextField

2017-08-29  本文已影响740人  YvanLiu

更新:2018.05.24

整理了一下demo:SwiftDemo


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

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)
UITextBorderStyle属性 描述
none 无边框
line 直角矩形边界线
bezel 有阴影的边框
roundedRect 圆角矩形边框
UIReturnKeyType属性 描述
default 默认,标有Return
go 标有Go的按钮
google 标有Google的按钮
next 标有Next的按钮,中文键盘是'下一步'
route 标有Route的按钮
search 标有Search的按钮,中文键盘是'搜索'
send 标有Send的按钮,中文键盘是'发送'
yahoo 标有Yahoo!的按钮
done 标有Done的按钮,中文键盘是‘完成’
emergencyCall 紧急呼叫按钮
continue 标有Continue的按钮,中文键盘是‘继续’
UITextFieldViewMode属性 描述
never 从不出现
whileEditing 开始编辑时出现
unlessEditing 除了编辑外都出现
always 一直出现
UIKeyboardType属性 描述
default 默认键盘:支持所有字符
asciiCapable 支持ASCII的默认键盘
numbersAndPunctuation 标准电话键盘,支持+*#等符号
URL URL键盘,有.com按钮;只支持URL字符
numberPad 数字键盘
phonePad 电话键盘
namePhonePad 电话键盘,也支持输入人名字
emailAddress 用于输入电子邮件地址的键盘
asciiCapableNumberPad 支持ASCII的数字键盘
decimalPad 带‘.’的数字键盘
twitter 功能齐全键盘,类似asciiCapable
webSearch 带有面向url的附加的默认键盘类型
UIKeyboardAppearance属性 描述
default 白色,这个字段是为了兼容以前的版本
dark 黑色
light 白色
alert 黑色,这个字段是为了兼容以前的版本

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

3. UITextFieldDelegate

  1. 首先要添加协议头


  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
    }


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

猜你喜欢

热点阅读