当前位置: 首页 > news >正文

ios设置textField只能输入数字用于电话号码

首先在.xib中将UITextField的Keyboard设置为Number Pad,但是使用时键盘会切回别的键盘无法对内容进行校验。通过神奇的百度我知道了通过以下方法可以解决这样的问题:

首先让.xib的viewController实现UITextFieldDelegate然后和想要校验的控件关联。

以上是xib,如果是代码设置的 就不要考虑还是那个面部分

然后将下列代码粘贴到类中即可。

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    return [self validateNumber:string];
}

- (BOOL)validateNumber:(NSString*)number {
    BOOL res = YES;
    NSCharacterSet* tmpSet = [NSCharacterSet characterSetWithCharactersInString:@"0123456789"];
    int i = 0;
    while (i < number.length) {
        NSString * string = [number substringWithRange:NSMakeRange(i, 1)];
        NSRange range = [string rangeOfCharacterFromSet:tmpSet];
        if (range.length == 0) {
            res = NO;
            break;
        }
        i++;
    }
    return res;
} 

还有一种方式,以下这种方式我还没有试过但是我找到了就分享出来吧:

1.定义常量以备使用

#define NUMBERS @"0123456789"

2.进行以下操作

- (BOOL)textField:(UITextField*)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString*)string
{
        NSCharacterSet*cs;
        cs = [[NSCharacterSetcharacterSetWithCharactersInString:NUMBERS] invertedSet];
        NSString*filtered = [[string componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""];
        BOOLbasicTest = [string isEqualToString:filtered];
        if(!basicTest) {
            UIAlertView* alert = [[UIAlertViewalloc] initWithTitle:@"提示"
                                                            message:@"请输入数字"
                                                           delegate:nil
                                                  cancelButtonTitle:@"确定"
                                                  otherButtonTitles:nil];
            [alert show];
            returnNO;
        }
    returnYES;
}

相关文章:

  • 安装Mariadb常见的问题(五)
  • 入门,创建uni-app项目
  • Java中避免表单重复提交
  • uni-app中理解,区分,使用rpx单位和px单位及样式字体的导入
  • Selenium2+python自动化27-查看selenium API
  • 了解uni-app的生命周期(应用,页面生命周期)执行顺序
  • linux之程序包安装
  • Java开发程序,使用编辑器编写创建Java项目、类
  • uni-app中下拉刷新及上拉刷新的使用
  • 搭建本地api接口
  • 2016总结
  • vue,uni-app组件间的通讯(父子,兄弟组件间传值)
  • python学习笔记10(用户交互程序)
  • uni-app开发微信小程序封装异步请求
  • Python语法速览与机器学习开发环境搭建
  • 【译】JS基础算法脚本:字符串结尾
  • Google 是如何开发 Web 框架的
  • [rust! #004] [译] Rust 的内置 Traits, 使用场景, 方式, 和原因
  • Android 控件背景颜色处理
  • css的样式优先级
  • ES6语法详解(一)
  • FastReport在线报表设计器工作原理
  • JavaScript DOM 10 - 滚动
  • js中forEach回调同异步问题
  • Laravel Mix运行时关于es2015报错解决方案
  • Lucene解析 - 基本概念
  • node-glob通配符
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • 更好理解的面向对象的Javascript 1 —— 动态类型和多态
  • 聊聊sentinel的DegradeSlot
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 面试总结JavaScript篇
  • 设计模式(12)迭代器模式(讲解+应用)
  • 思否第一天
  • 新手搭建网站的主要流程
  • 异步
  • 用Python写一份独特的元宵节祝福
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • ​草莓熊python turtle绘图代码(玫瑰花版)附源代码
  • ​决定德拉瓦州地区版图的关键历史事件
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • #100天计划# 2013年9月29日
  • #HarmonyOS:Web组件的使用
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (echarts)echarts使用时重新加载数据之前的数据存留在图上的问题
  • (二开)Flink 修改源码拓展 SQL 语法
  • (五)Python 垃圾回收机制
  • (一)认识微服务
  • (一一四)第九章编程练习
  • (已解决)vue+element-ui实现个人中心,仿照原神
  • (转)linux自定义开机启动服务和chkconfig使用方法
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • **PyTorch月学习计划 - 第一周;第6-7天: 自动梯度(Autograd)**