【iOS】UITextField中的输入检测——限制只能输入数字和小数点

这篇具有很好参考价值的文章主要介绍了【iOS】UITextField中的输入检测——限制只能输入数字和小数点。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

问题提出

最近趁着放假时间,在看The Big Nerd Ranch的iOS编程,想着重新复习一遍iOS开发的基础知识
书中第四章有一个温度转换的app实现,整体实现并不难
其中有个问题——如何利用UITextFieldDelegate委托限制UITextField的输入

问题背景

UITextFieldDelegate里面有个函数

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool

简单来说,就是通过这个函数处理输入的请求,然后返回bool值,对应是否修改文本
书中原本的要求是限制TextField中只能输入一个小数点,已经给出了相关实现

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
	let existingTextHasDecimalSeparator = textField.text?.range(of: ".")
	let replacementTextHasDecimalSepatator = string.range(of: ".")
	if existingTextHasDecimalSeparator != nil, replacementTextHasDecimalSepatator != nil {
		return false
	} else {
		return true
	}
}

实现很简单,无非就是利用了Swift中stringrange方法,对已输入的字符串和待输入的字符串中的小数点进行查找

解决问题

后面留了一个课后题:要求使用CharacterSet实现禁止字母的输入,我这里直接实现了只能输入数字和小数点的限制
首先初始化一个只含小数点和数字的CharacterSet

let characterSet = CharacterSet.init(charactersIn: ".0123456789")

然后同样是在replacementString中对characterSet中的字符进行查找,如果结果不为nil就返回false

if string.rangeOfCharacter(from: characterSet) == nil {
            return false
}

把这些全部写到前面的textField函数中,编译运行会发现一个问题——删除键失效了

重新认真看doc,会发现实际上在按下删除键的时候textField函数也被调用了
但是replacementString会是一个空字符串,而前面没有考虑这个问题,就会导致删除键失效

修改之后如下文章来源地址https://www.toymoban.com/news/detail-807294.html

if string.rangeOfCharacter(from: characterSet) == nil,
    !string.isEmpty {
    return false
}

到了这里,关于【iOS】UITextField中的输入检测——限制只能输入数字和小数点的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [虚幻引擎 UE5] EditableText(可编辑文本) 限制只能输入数字并且设置最小值和最大值

    本蓝图函数可以格式化 EditableText 控件输入的数据,让其只能输入一定范围内的整数。 蓝图函数 调用方法 下载蓝图(5.2.1版本) https://dt.cq.cn/archives/618

    2024年02月10日
    浏览(51)
  • input 输入框限制只能输入两位有效小数

    前端入门即教学,今天博主分享几个前端金额实用的小案例,复制拿过去就能用哦!    相信有很多前端小伙伴在工作中遇到过这样的需求,就是限制输入框内容只能输入两位小数吧,想了用正则但是又不知道怎么下手的同学,接下来博主分享一个小案例,下次遇到这个的时

    2024年02月01日
    浏览(38)
  • element ui限制输入框只能输入正整数

    element ui限制输入框只能输入正整数

    2024年02月11日
    浏览(41)
  • input输入限制:自动补全两位小数、金额限制两位小数、只能输入正整数

    金额自动补全两位小数 限制只能输入正整数 金额限制两位小数 金额限制两位数,支持输入负数

    2024年04月17日
    浏览(38)
  • 【100个 Unity实用技能】 | InputField输入框组件实现输入限制,只能输入中文或特殊字符等

    🎬 博客主页:https://xiaoy.blog.csdn.net 🎥 本文由 呆呆敲代码的小Y 原创,首发于 CSDN 🙉 🎄 学习专栏推荐:Unity系统学习专栏 🌲 游戏制作专栏推荐:游戏制作 🌲Unity实战100例专栏推荐:Unity 实战100例 教程 🏅 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 📆 未来很长

    2023年04月27日
    浏览(42)
  • input输入框校验只能输入数字或者小数校验

    解释: 让我们逐步解释这段代码的每个步骤: number.value.replace(/[^d.]/g, \\\'\\\') : 这一步使用正则表达式 /[^d.]/g ,将 number.value 中除了数字和小数点以外的字符都替换为空字符串,即去除非数字和小数点的字符。 .replace(/^0+(d)/, \\\'$1\\\') : 这一步使用正则表达式 /^0+(d)/ ,将 number.valu

    2024年02月14日
    浏览(37)
  • vue输入框只能输入数字类型,禁止输入和粘贴e

    js怎么去除1e里面e  方法一:使用 Number() 函数将科学计数法表示的字符串转换为数字。然后,使用 toString() 方法将其转换回字符串形式,这样就会自动移除科学计数法中的 \\\"e\\\" var num = 1e10; // 科学计数法表示的数字 var numStr = Number(num).toString(); // 转换为字符串,自动移除 \\\"e\\\" co

    2024年02月12日
    浏览(40)
  • input输入框输入只能输入数字、字母等组合的正则表达式

    1.限制input输入框只能输入大小写字母、数字、下划线的正则表达式: 2.限制input输入框只能输入小写字母、数字、下划线的正则表达式: 3.限制input输入框只能输入数字和点的正则表达式: 4.限制input输入框只能输入中文的正则表达式: 5.限制input输入框只能输入数字的正则表

    2024年02月03日
    浏览(46)
  • JS正则表达式只能输入数字跟字母

    ###最近需要些js控制一个输入验证,搞了好多文字,东凑西并终于汇总了。只要控制不给输入中文,空格,特殊字符就是 只能输入数字跟字母了,反过来实现 https://www.jb51.cc/nodejs/993719.html https://www.codenong.com/cs105929828/

    2024年02月12日
    浏览(56)
  • QT QLineEdit 只能输入字母或数字,输入格式约束(正则表达式)

    1.只允许输入整型 ui-lineEdit-setValidator(new QIntValidator(ui-lineEdit)); 1 2.只允许输入数字 ui-lineEdit-setValidator(new QRegExpValidator(QRegExp(\\\"[0-9]+$\\\")));    1 3.只能输入字母和数字 ui-lineEdit-setValidator(new QRegExpValidator(QRegExp(\\\"[a-zA-Z0-9]+$\\\")));    1 3.1 只能输入大写数据: ui-lineEdit-setValidator(new QRegE

    2024年02月04日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包