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

先来看看要实现的效果图

一.介绍一下功能

当输入一个邮箱的数字,会默认在后面匹配出来@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实现邮箱模糊匹配功能的全部功能,实现后是不是很好用呢?感兴趣的快快动手实践起来,希望对大家的学习或者工作能有所帮助。

(0)

相关推荐

  • 简介iOS开发中应用SQLite的模糊查询和常用函数

    SQLite模糊查询 一.示例 说明:本文简单示例了SQLite的模糊查询 1.新建一个继承自NSObject的模型 该类中的代码: 复制代码 代码如下: // //  YYPerson.h //  03-模糊查询 // //  Created by apple on 14-7-27. //  Copyright (c) 2014年 wendingding. All rights reserved. // #import <Foundation/Foundation.h> @interface

  • iOS模糊效果的实现方法

    本文实例为大家分享了iOS模糊效果的3种方法,供大家参考,具体内容如下 方案一:利用系统的CoreImage(滤镜) 重点理解CIImage,CIFilter,CIContext,CGImageRef 滤镜处理的过程比较慢,会造成加载图片缓慢的现象(等一会才看到图片),尽量放到子线程执行 - (void)viewDidLoad { [super viewDidLoad]; // 加载一张图片 UIImage *image = [UIImage imageNamed:@"che"]; /

  • iOS实现背景高斯模糊效果

    废话不多说,实现简单的高斯模糊的效果代码: UIView *bgview= [[UIViewalloc]initWithFrame:self.view.frame]; // bgview.backgroundColor = [UIColor blackColor]; // bgview.alpha = 0.9; bgview.tag =10086; [self.viewaddSubview:bgview]; UIBlurEffect *blur = [UIBlurEffecteffectWith

  • iOS开发之图片模糊效果的五种实现代码

    前言 在iOS开发中我们经常会用到模糊效果使我们的界面更加美观,而iOS本身也提供了几种达到模糊效果的API,如:Core Image,使用Accelerate.Framework中的vImage API,在iOS 7之前系统的类提供UIToolbar,在iOS 8之后苹果新增加的一个类UIVisualEffectView:另外也有一些牛人写的第三方框架,如:GPUImage.本篇就针对这五种方式讲解一下具体的实现. 正文 下面就按照这五种方式,将其实现模糊效果的具体实现一一讲解一下: 在iOS

  • iOS 实现模糊搜索的功能

    模糊搜索的实现思路是当搜索框开始编辑时对搜索框中的文本与后台给的资源相对比,包含搜索文本的展示在tableview中. 关键部分代码如下: -(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText { self.result = nil; for (int i = 0; i < self.nameArray.count; i++) { NSString *string = self.nameArr

  • iOS图片模糊效果的实现方法

    本文为大家分享了iOS图片模糊效果的三种实现方式,供大家参考,具体内容如下 1.实现效果依次如图:原图.iOS8效果.Core Image效果. VImage 效果 - 2. 代码 #import "ViewController.h" #import <Accelerate/Accelerate.h> @interface ViewController () @end @implementation ViewController - (void)viewDidLoad {

  • iOS毛玻璃效果的实现及图片模糊效果的三种方法

    App设计时往往会用到一些模糊效果或者毛玻璃效果,iOS目前已提供一些模糊API可以让我们方便是使用. 话说苹果在iOS7.0之后,很多系统界面都使用了毛玻璃效果,增加了界面的美观性,比如下图的通知中心界面; 但是其iOS7.0的SDK并没有提供给开发者实现毛玻璃效果的API,所以很多人都是通过一些别人封装的框架来实现,后面我也会讲到一个; 其实在iOS7.0(包括)之前还是有系统的类可以实现毛玻璃效果的, 就是 UIToolbar这个类,并且使用相当简单,几行代码就可以搞定. 下面是代码实现:

  • iOS开发中视图的下拉放大和上拉模糊的效果实现

    把"秘密"的Cell效果整体视图都放到scrollView中,基本是和secret app 一模一样的效果了. 代码如下:(模糊效果的类就不写了,大家可以搜"UIImage+ImageEffects",还要导入Accelerate.framework) 1.MTSecretAppEffect.h 复制代码 代码如下: #import <Foundation/Foundation.h>    @interface MTSecretAppEffect : N

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

    先来看看要实现的效果图 一.介绍一下功能 当输入一个邮箱的数字,会默认在后面匹配出来@qq.com,当然这个默认@qq.com可以换成其他的如@163.com等等.这里默认是@qq.com,因为我们的产品汪做过统计大多数用户还是用的qq邮箱,所以默认是@qq.com. 当输入@符号还是不会有所变化,但是如果在@之后再输入字符,会将这个字符和你想要提示的邮箱后缀做匹配,我这里是需要匹配@qq.com,@163.com,@126.com,@yahoo.com,@139.com,@henu.com类型

  • jQuery简单实现的HTML页面文本框模糊匹配查询功能完整示例

    本文实例讲述了jQuery简单实现的HTML页面文本框模糊匹配查询功能.分享给大家供大家参考,具体如下: 项目中需要用到此功能,使用过EasyUI中的Combobox,网上也搜过相应的解决办法,对于我的项目来说都不太合适,因为我还是喜欢比较纯粹的东西,就自己动手写了一个,比较简单,但还算能用,我的项目中也已经使用上了,做了个小demo作为记录,有需要的自己复制代码改一改就好了. 使用在线HTML/css/JavaScript运行工具:http://tools.jb51.net/code/Html

  • 正则表达式实现字符的模糊匹配功能示例

    本文实例讲述了正则表达式实现字符的模糊匹配功能.分享给大家供大家参考,具体如下: package com.cn.util; import java.util.regex.Pattern; /** * 正则表达式 工具类 * * @author lifangyu */ public class RegexUtil { /* * IP地址的匹配标达式 ( // \\d{1,3}) // :\d // 0~9数字,{1,3} // 至少一位,最多三位) */ private static String

  • javascript正则表达式模糊匹配IP地址功能示例

    本文实例讲述了javascript正则表达式模糊匹配IP地址功能.分享给大家供大家参考,具体如下: function checkip() { var strIP = document.getElementById("accessip").value; var re = /^(\d{1,3}|\*)\.(\d{1,3}|\*)\.(\d{1,3}|\*)\.(\d{1,3}|\*)$/g //模糊匹配IP地址的正则表达式 if(re.test(strIP)){ if(RegExp.$1

  • Laravel5中实现模糊匹配加多条件查询功能的方法

    本文实例讲述了Laravel5中实现模糊匹配加多条件查询功能的方法.分享给大家供大家参考,具体如下: 方法1. ORM模式 public function ReportAccurate($data) { if(is_array($data)) { $where = $this->whereAll($data); return $where; } else { return false; } } /*多条件模糊*/ public function whereAll($data) { $query

  • Java实现的模糊匹配某文件夹下的文件并删除功能示例

    本文实例讲述了Java实现的模糊匹配某文件夹下的文件并删除功能.分享给大家供大家参考,具体如下: package com.wyebd.gis; import java.io.File; /** * @Title: DelFiles.java * @Package com.wyebd.gis * @Description: * @author lisr * @date Mar 7, 2012 5:36:03 PM * @version V1.0 */ public class DelFiles {

  • Vue文本模糊匹配功能如何实现

    模糊匹配功能在下拉菜单的组件中用的非常多,于是打算写几个demo看看细节上是如何实现的. 一.最简单的模糊匹配:计算属性 <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1

  • Qt实现模糊匹配功能的实例详解

    目录 1.准备基础数据 2.创建并实例化匹配类 3.控件绑定 对于浏览器的使用,我想大家一定不会陌生吧,输入要搜索的内容时,会出现相应的匹配信息. 那么,今天我要讲述的也是这样一个功能. 首先看一下展示效果 输入任意文本后,弹出具有该文本的符合项,也就是模糊查询. 实现功能的核心是:QCompleter 该类可以在任何Qt小部件中提供自动完成搜索功能,例如:QLineEdit.QComboBox.当输入指定字符后,QCompleter会根据单词列表提供的内容进行筛查. 在这里,我是采用QLine

  • JS仿百度自动下拉框模糊匹配提示

    实际项目中,我们可以把数据获取改成ajax动态获取,在 getContent()中 <!DOCTYPE> <html> <head> <title>js/jQuery实现类似百度搜索功能</title> <meta name="Author" content="Michael"> <meta name="Keywords" content="js/jQuery

  • 扩展 Entity Framework支持复杂的过滤条件(多个关键字模糊匹配)

    之前遇到一个棘手的Linq to EF查询的技术问题,现有产品表Product,需要根据多个关键字模糊匹配产品名称, 现将解决方案分享出来. 问题描述 根据需求,我们需要编写如下的SQL语句来查询产品 复制代码 代码如下: select * from dbo.Product where (ProductName like 'Product1%' or ProductName like 'Product2%') 如何将以上的SQL语句转换成EF的写法呢? 方案一 可以使用Union,将以上SQL语

随机推荐