swift-TextField-输入完后点击空白隐藏键盘,TextField输入验证

这篇博客介绍了在Swift中如何实现TextField输入完成后自动隐藏键盘的两种方法,并提供了详细的操作步骤。此外,还讲解了TextField的输入验证,包括遵循UITextFieldDelegate接口,设置代理以及限制只能输入汉字的条件。文中还提到了NSPredicate和正则表达式的应用,为文本框输入的校验提供了更多可能性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

textField输入完成后隐藏键盘

方法一(推荐使用):

import Foundation
extension UIViewController{
    //隐藏键盘
    func hideKeyboardWhenTappedAround() {
        let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(UIViewController.dismissKeyboard))
        tap.cancelsTouchesInView = false
        view.addGestureRecognizer(tap)
    }
    
    @objc private func dismissKeyboard() {
        view.endEditing(true)
    }
    
}

在viewController中调用

override func viewDidLoad() {
        super.viewDidLoad()
        //隐藏键盘,只要有键盘弹出,点击空白出就会隐藏键盘
        self.hideKeyboardWhenTappedAround()
    }

方法二:

touchUpInside 事件要将总的View改为UIControl
这里写图片描述

 //手机号输入框
 @IBOutlet var text_phone: UITextField!
 //密码输入框
 @IBOutlet var text_pwd: UITextField!
 
 //点击键盘 GO或者return时触发(接口方法)
 func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        //TextField失去焦点
        text_phone.resignFirstResponder()
        text_pwd.resignFirstResponder()
        return true
  }
  //点击空白处让键盘消失(这个事件是视图总父的)
 @IBAction func touchUpInside(_ sender: UIControl) {
        //TextField失去焦点
        text_phone.resignFirstResponder()
        text_pwd.resignFirstResponder()
    }
 //输入完成后触发的事件(可以不用实现,没有多大用)
 @IBAction func didEndOnExit(_ sender: UITextField) {
        //TextField失去焦点
        text_phone.resignFirstResponder()
        text_pwd.resignFirstResponder()
    }
    //触摸事件函数,当一个或多个手指离开屏幕时触发(当手指离开输入框后键盘消失) 这个是实现重写的(可以不用实现,没有多大用)
 override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
        //TextField失去焦点
        text_phone.resignFirstResponder()
        text_pwd.resignFirstResponder()
    }

TextField输入验证

1.实现 ‘UITextFieldDelegate’接口
2.为textField设置 delegate监听

text_phone.delegate = self
text_pwd.delegate = self
     /// TextField每次输入的时候会被触发,返回true
    /// - Parameters:
    ///   - textField: 用户输入的textField
    ///   - range: 例如粘贴或者选中一段文字所占用的范围
    ///   - string: 用户输入的字符
    /// - Returns: 是否允许用户输入到。textfield
 func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        var xzText_len: Int = 11
        //获取用户输入的总长度
        let text1 = textField.text
        let len = (text1?.count)! + string.count - range.length
        //根据不同的输入框限制不同的条件
        if text_pwd.isFirstResponder{
            xzText_len = 12 //限制输入的长度为 12
            let regex = "^[A-Za-z0-9]+$" //只能输入字母和数字的正则表达式
            //使用表达式
            let predicate = NSPredicate(format: "SELF MATCHES %@", regex)
            //返回的匹配结果
            let isValid = predicate.evaluate(with: string)
            print(string)
            //如果用户输入的总长度小于等于规定的长度
            if len<=xzText_len{
                return isValid
            }else{
                return false
            }
        }else if text_phone.isFirstResponder{
            xzText_len = 11
            return len<=xzText_len
        }else{
            return false
        }
    }

规定文本框只能输入汉字参考:
只能输入汉字

NSPredicate检索详情参考(可以用于判断某元素是否存在与数组中):
NSPredicate检索

正则表达式参考(正则表达式大全)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值