当前位置: > > > Swift - 文本输入框(UITextField)的用法

Swift - 文本输入框(UITextField)的用法

(本文代码已升级至Swift4)

1,文本框的创建,有如下几个样式:

  • UITextBorderStyle.none:无边框
  • UITextBorderStyle.line:直线边框
  • UITextBorderStyle.roundedRect:圆角矩形边框
  • UITextBorderStyle.bezel:边线+阴影
圆角矩形边框样例:
let textField = UITextField(frame: CGRect(x:10, y:60, width:200, height:30))
//设置边框样式为圆角矩形
textField.borderStyle = UITextBorderStyle.roundedRect
self.view.addSubview(textField)

2,修改边框颜色、粗细、圆角半径

let textField = UITextField(frame: CGRect(x:10, y:60, width:200, height:30))
//设置边框样式为圆角矩形
textField.borderStyle = UITextBorderStyle.roundedRect
self.view.addSubview(textField)

//修改圆角半径的话需要将masksToBounds设为true
textField.layer.masksToBounds = true
textField.layer.cornerRadius = 12.0  //圆角半径
textField.layer.borderWidth = 2.0  //边框粗细
textField.layer.borderColor = UIColor.red.cgColor //边框颜色

3,文本框提示文字

textField.placeholder="请输入用户名"

4,文字大小超过文本框长度时自动缩小字号,而不是隐藏显示省略号

textField.adjustsFontSizeToFitWidth=true  //当文字超出文本框宽度时,自动调整文字大小
textField.minimumFontSize=14  //最小可缩小的字号

5,水平/垂直对齐方式

/** 水平对齐 **/
textField.textAlignment = .right //水平右对齐
textField.textAlignment = .center //水平居中对齐
textField.textAlignment = .left //水平左对齐

/** 垂直对齐 **/
textField.contentVerticalAlignment = .top  //垂直向上对齐
textField.contentVerticalAlignment = .center  //垂直居中对齐
textField.contentVerticalAlignment = .bottom  //垂直向下对齐

6,背景图片设置

textField.borderStyle = .none //先要去除边框样式
textField.background = UIImage(named:"background1");

7,清除按钮(输入框内右侧小叉)

textField.clearButtonMode = .whileEditing  //编辑时出现清除按钮
textField.clearButtonMode = .unlessEditing  //编辑时不出现,编辑后才出现清除按钮
textField.clearButtonMode = .always  //一直显示清除按钮

8,密码输入框

textField.isSecureTextEntry = true //输入内容会显示成小黑点

9,设置文本框关联的键盘类型

  • Default:系统默认的虚拟键盘
  • ASCII Capable:显示英文字母的虚拟键盘
  • Numbers and Punctuation:显示数字和标点的虚拟键盘
  • URL:显示便于输入url网址的虚拟键盘
  • Number Pad:显示便于输入数字的虚拟键盘
  • Phone Pad:显示便于拨号呼叫的虚拟键盘
  • Name Phone Pad:显示便于聊天拨号的虚拟键盘
  • Email Address:显示便于输入Email的虚拟键盘
  • Decimal Pad:显示用于输入数字和小数点的虚拟键盘
  • Twitter:显示方便些Twitter的虚拟键盘
  • Web Search:显示便于在网页上书写的虚拟键盘
数字键盘使用样例:
textField.keyboardType = UIKeyboardType.numberPad

10,使文本框在界面打开时就获取焦点,并弹出输入键盘

textField.becomeFirstResponder()

11,使文本框失去焦点,并收回键盘

textField.resignFirstResponder()

12,设置键盘 return 键的样式

textField.returnKeyType = UIReturnKeyType.done //表示完成输入
textField.returnKeyType = UIReturnKeyType.go //表示完成输入,同时会跳到另一页
textField.returnKeyType = UIReturnKeyType.search //表示搜索
textField.returnKeyType = UIReturnKeyType.join //表示注册用户或添加数据
textField.returnKeyType = UIReturnKeyType.next //表示继续下一步
textField.returnKeyType = UIReturnKeyType.send //表示发送
以发送样式(send)为例:

13,键盘 return 键的响应

import UIKit

class ViewController: UIViewController,UITextFieldDelegate {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let textField = UITextField(frame: CGRect(x:10,y:160,width:200,height:30))
        //设置边框样式为圆角矩形
        textField.borderStyle = UITextBorderStyle.roundedRect
        textField.returnKeyType = UIReturnKeyType.done
        textField.delegate=self
        self.view.addSubview(textField)
    }
    
    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        //收起键盘
        textField.resignFirstResponder()
        //打印出文本框中的值
        print(textField.text ?? "")
        return true
    }
}

评论10
  • 10楼
    2018-12-02 19:55
    大兵

    非常好的教程,谢谢老大

    站长回复

    不客气,也谢谢你的夸奖。

  • 9楼
    2018-02-03 16:09
    沸腾

    你好,请问如何存储用户在输入框里输入的字符串呢?例如用户注册时输入完密码,按一个按钮会存储用户输入的密码为字符串类型,然后可以在其他地方调用。

    站长回复

    看你这个密码要存储多久了。如果只有在当前应用的生命周期里使用,定义一个全局变量来存储就可以了。

    如果想应用退出后,下次启动还能得到上次存储的密码,可以考虑使用UserDefaults来存储。
    关于UserDefaults的使用可以参考我之前写的这篇文章:Swift - 使用UserDefaults来进行本地数据存储

  • 8楼
    2018-01-05 11:14
    WHISPERS

    swift 输入框 没有密码输入属性?

    站长回复

    有的,把isSecureTextEntry属性设置成true就可以了。

  • 7楼
    2017-12-18 11:01
    哈哈

    你好,我想问一下。假如我不想让这个键盘一到这个界面就打开,我想让用户点一下输入框再打开键盘的话应该怎么办呢?

    站长回复

    默认情况下键盘是不会自动打开的,要点一下输入框才会打开。

  • 6楼
    2016-08-31 15:57
    liu_dream

    textField.keyboardType = .NumberPad
    textField.returnKeyType = .Done
    请问 为什么弹出键盘 不显示return键

    站长回复

    数字键盘(numberPad)就是没有return键的,所以即使设置了returnKeyType也没用。

  • 5楼
    2016-08-23 17:48
    Felix灬泡泡

    航哥,设置textField.keyboardType为Number Pad或Decimal Pad时在模拟器中运行(未真机测试)一直报如下警告(其它keyboardType没试过,部分未报):
    Number Pad:Can't find keyplane that supports type 4 for keyboard iPhone-Portrait-NumberPad; using 563160167_Portrait_iPhone-Simple-Pad_Default
    Decimal Pad:Can't find keyplane that supports type 8 for keyboard iPhone-Portrait-DecimalPad; using 4131139949_Portrait_iPhone-Simple-Pad_Default
    怎么破?

    XCode版本:Version 7.3.1 (7D1014)
    模拟器版本:Version 9.3 (SimulatorApp-645.9 CoreSimulator-209.19)

    Ps:模拟器中Hardware->Keyboard中的选项不管勾选与否都会出现该警告!

    站长回复

    我测试了下没发现这个问题啊?

  • 4楼
    2016-08-23 17:04
    Felix灬泡泡

    URL:显示便于输入数字的虚拟键盘
    Number Pad:显示便于输入数字的虚拟键盘
    第7点中URL项写错了

    站长回复

    多谢你的提醒,现已修正。

  • 3楼
    2016-03-08 17:05
    passw

    如何设置随着键盘升高 不被键盘挡住

    站长回复

    可以看我以前写的这篇文章:Swift - 键盘出现后自动改变页面布局,防止下方元素被键盘遮挡(http://www.hangge.com/blog/cache/detail_911.html)

  • 2楼
    2016-02-02 14:44
    linchan

    var str:NSString!=""
    func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {

    if (str as String).characters.count>=0
    {
    if range.length>0
    {
    str=str.substringWithRange(NSMakeRange(0, str.length-1))
    }else
    {
    var myStr=NSMutableString(string: str)
    myStr.appendString(string)
    str=myStr as NSString
    }
    }

    let label=self.view.viewWithTag(10) as! UILabel
    label.text="您的输入是:"+(str as String)
    return true;
    }
    航哥您好,上面的textField代理方法,怎么才可以准确的判断str的长度,我试过用N�SString下的str.length和String下的(str as String).characters.count都不能准确,有时候退格时会崩溃

    站长回复

    你可以看下我原来写的这篇文章:Swift - 文本输入框内容改变时响应,并获取最新内容(http://www.hangge.com/blog/cache/detail_718.html)

  • 1楼
    2015-05-21 18:57
    zftt

    运行时出现breakpoint4.1,读取输入的东西的时候会出现signal SIGABRT,怎么解决

    站长回复

    这个bug我一直没能复现,不知道怎么帮你了。