热门标签 | HotTags
当前位置:  开发笔记 > IOS > 正文

IOS实现邮箱模糊匹配的功能

先来看看要实现的效果图 一.介绍一下功能 当输入一个邮箱的数字,会默认在后面匹配出来@qq.com,当然这个默认@qq.com可以换

先来看看要实现的效果图

一.介绍一下功能

当输入一个邮箱的数字,会默认在后面匹配出来@qq.com,当然这个默认@qq.com可以换成其他的如@163.com等等。这里默认是@qq.com,因为我们的产品汪做过统计大多数用户还是用的qq邮箱,所以默认是@qq.com。

当输入@符号还是不会有所变化,但是如果在@之后再输入字符,会将这个字符和你想要提示的邮箱后缀做匹配,我这里是需要匹配@qq.com,@163.com,@126.com,@yahoo.com,@139.com,@henu.com类型。例如:在@之后你输入了1,这个时候会在@1之后匹配出来63.com。接着,当你在@1之后又输入了2,会在@12后面匹配出来6.com。这些匹配的优先级是根据你给的需要匹配邮箱类型的顺序来的,并且这些想要匹配的邮箱类型也是完全可配的,可根据产品的需求作自己的定制。

二.说一下用法

1.先说一下如果你是在xib中想实现这个功能,首先要拖拽一个textField,设置好约束,然后让这个textField的类关联到XLTextField,当前前提你要下载并导入了XLTextField.hXLTextField.m,切记不要忘了将textField.delegate设置给viewController,textField样式可在xib自行设置,匹配的邮箱区域颜色可自行设置,然后在代码中只需要调API

/**
*
*1.通过xib创建只需要赋值此参数即可
*@param mailTypeArray邮箱匹配类型
*
*/@property(nonatomic,strong)NSMutableArray*mailTypeArray;

示例代码:

self.textField.mailTypeArray= [NSMutableArrayarrayWithObjects:@"@qq.com",@"@163.com",@"@126.com",@"@yahoo.com",@"@139.com",@"@henu.com",nil];

XLTextField.h还提供了一个可选的mailMatchColor属性这个属性是UIColor类型的,是匹配邮箱类型的颜色,可根据需求自行设置。

/**
*Optional匹配的邮箱类型后缀默认是RGB为170 170 170的颜色,可自行设置
*/@property(nonatomic,strong)UIColor* mailMatchColor;

2.通过手动frame创建两个基本参数设置大小和字号,其他设置可额外自行设置,调用API

/**
*2.通过手写创建textField时候调用
*
*@param frameframe大小
*@param fontSize textField大小
*
*@return self
*/- (instancetype)initWithFrame:(CGRect)frame fontSize:(CGFloat)fontSize;

示例代码:

XLTextField * field = [[XLTextField alloc] initWithFrame:CGRectMake(100, 200, 200, 30) fontSize:12];
field.placeholder = @"输入邮箱地址";
field.mailTypeArray = [NSMutableArray arrayWithObjects:@"@qq.com",@"@163.com",@"@126.com",@"@yahoo.com",@"@139.com",@"@henu.com", nil];
field.mailMatchColor = [UIColor redColor]; 可选属性
[self.view addSubview:field];

我在示例程序中只针对xib的textField写了手势关闭,结束textField的输入操作,手洞创建textField没有写结束第一响应者的操作。如果你在实际使用中,可以根据你的需求例如点击键盘的完成按钮,或者触摸屏幕的View等场景下结束textField的键盘第一响应者,从而取textField的text进行额外的需求操作。

可根据自己需求定制自己的frame,font大小。不过不支持initnew初始化方法,即使用了也没关系,会有一个温馨的报错提示

- (instancetype)init__attribute__((unavailable("init方法不可用,请用initWithName:fontSzie:")));+ (instancetype)new__attribute__((unavailable("init方法不可用,请用initWithName:fontSzie:")));

三.介绍一下实现原理

1.可能你不看源码,就认为是一个textField实现了全部功能,其实No.我这里是配合了一个Label,在xib实现时利用aulayout手动添加Label。textField只是用来让用户输入,Label用来存储匹配之后的邮箱(邮箱号码+邮箱类型),并且展示。你看到的其实是Label的text内容。当最后结束编辑的时候,Label会将内容复制给textField的text,然后清空Label。Label只是在这里提一下实现方式,真正使用的值还是通过textField.text拿到的值。在这里你可能会吐槽,为什么不用一个textField呢,多简单省事。但是事实是我尝试过一个textField,中间遇到了一个坑,好像是textField一个bug,暂且这样说 因为当时确实是很奇葩的问题,具体是那么也忘记了,这里也不展开说了,有兴趣你可以用一个textField来尝试一下哈。

2.textField的代理方法全部封装在textField.m内部,在内部已经处理了这些代理,更加方便他人调用,不用再花很多心思在调试textField的代理方法上。不论是用xib还是用手动代码创建,都不需要设置textField.delegate给控制器。

3.在textField的shouldChangeCharactersInRange代理方法中针对你输入的每一个字符进行邮箱的匹配,下面会有这一块的完整代码。在textFieldDidEndEditing代理方法中将Label的值赋值给textField.text,然后将Label.text清空,直接取textField.text作为我们最终的结果。

下面贴上匹配邮箱过程的关键代码,并且每行都有注释。

/**
*匹配邮箱过程
*
*@param rangerange
*@param string用户输入string
*/- (void)configMailMatchingRange:(NSRange)range replacementString:(NSString*)string
{//获取完整的输入文本NSString*completeStr = [self.textstringByReplacingCharactersInRange:rangewithString:string];//以@符号分割文本NSArray*temailArray = [completeStrcomponentsSeparatedByString:@"@"];//获取邮箱前缀NSString*emailString = [temailArrayfirstObject];//邮箱匹配没有输入@符号时用@匹配NSString*matchString =@"@";if(temailArray.count>1){//如果已经输入@符号截取@符号以后的字符串作为匹配字符串matchString = [completeStrsubstringFromIndex:emailString.length];
}//匹配邮箱得到所有跟当前输入匹配的邮箱后缀NSMutableArray*suffixArray = [selfcheckEmailStr:matchString];//边界控制如果没有跟当前输入匹配的后缀置为@""NSString*fixStr = suffixArray.count>0? [suffixArrayfirstObject] :@"";//将lblEmail部分字段隐藏NSIntegercutLenth = suffixArray.count>0? completeStr.length: emailString.length;//最终的邮箱地址self.email= fixStr.length>0? [NSStringstringWithFormat:@"%@%@",emailString,fixStr] : completeStr;//设置lblEmail的attributeNSMutableAttributedString*attributeString = [[NSMutableAttributedStringalloc]initWithString:[NSStringstringWithFormat:@"%@%@",emailString,fixStr]];

[attributeStringaddAttribute:NSForegroundColorAttributeNamevalue:[UIColorclearColor]range:NSMakeRange(0,cutLenth)];self.mailLabel.attributedText= attributeString;//清空文本框内容时隐藏lblEmailif(completeStr.length==0){self.mailLabel.text=@"";self.email=@"";
}
}

四、总结

以上就是IOS实现邮箱模糊匹配功能的全部功能,实现后是不是很好用呢?感兴趣的快快动手实践起来,希望对大家的学习或者工作能有所帮助。


推荐阅读
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 本文介绍了如何找到并终止在8080端口上运行的进程的方法,通过使用终端命令lsof -i :8080可以获取在该端口上运行的所有进程的输出,并使用kill命令终止指定进程的运行。 ... [详细]
  • 本文介绍了MyBioSource转甲状腺素蛋白定量检测ELISA试剂盒的应用方法及特点。ELISA法作为一项新技术在免疫诊断中的应用范围不断扩大,不仅适用于多种病原微生物引起的传染病、非传染病的免疫诊断,也可用于大/小分子抗原的定量检测。ELISA法具有灵敏、特异、简单、快速、稳定及易于自动化操作等特点,是一种早期诊断的良好方法,也可用于血清流行病学调查。MyBioSource转甲状腺素蛋白定量检测ELISA试剂盒使用方法包括对血清和血浆的操作要求。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 本文介绍了一种划分和计数油田地块的方法。根据给定的条件,通过遍历和DFS算法,将符合条件的地块标记为不符合条件的地块,并进行计数。同时,还介绍了如何判断点是否在给定范围内的方法。 ... [详细]
  • 本文讲述了作者通过点火测试男友的性格和承受能力,以考验婚姻问题。作者故意不安慰男友并再次点火,观察他的反应。这个行为是善意的玩人,旨在了解男友的性格和避免婚姻问题。 ... [详细]
  • 安卓select模态框样式改变_微软Office风格的多端(Web、安卓、iOS)组件库——Fabric UI...
    介绍FabricUI是微软开源的一套Office风格的多端组件库,共有三套针对性的组件,分别适用于web、android以及iOS,Fab ... [详细]
  • 本文介绍了多因子选股模型在实际中的构建步骤,包括风险源分析、因子筛选和体系构建,并进行了模拟实证回测。在风险源分析中,从宏观、行业、公司和特殊因素四个角度分析了影响资产价格的因素。具体包括宏观经济运行和宏经济政策对证券市场的影响,以及行业类型、行业生命周期和行业政策对股票价格的影响。 ... [详细]
  • 宁德时代与第四范式达成合作,将利用第四范式的AI技术,打造规模化的人工智能平台,并将AI技术融入电池生产线。通过全流程AI技术和低门槛的AI生产工具,宁德时代实现了对生产线数据的实时分析与决策。第四范式是一家人工智能技术与服务提供商,其先知平台降低了AI在各行业内的应用门槛。宁德时代是国内具备国际竞争力的动力电池制造商之一,专注于新能源汽车动力电池系统、储能系统的研发、生产和销售。 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
  • 本文介绍了解决二叉树层序创建问题的方法。通过使用队列结构体和二叉树结构体,实现了入队和出队操作,并提供了判断队列是否为空的函数。详细介绍了解决该问题的步骤和流程。 ... [详细]
  • 本文讨论了使用HTML5+JS开发App所需的框架和工具推荐,希望能提供真实案例作为参考。重点考虑框架和工具的文档齐全性以及是否支持二维码扫描、摇一摇等功能。同时提到了H5+框架的适用性。 ... [详细]
  • 本文介绍了一个程序,可以输出1000内能被3整除且个位数为6的所有整数。程序使用了循环和条件判断语句来筛选符合条件的整数,并将其输出。 ... [详细]
author-avatar
有点难
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有