最近做的项目,有一个函数,百度了一下 结果没 要研究了一下。

当用户输入邮箱形式的账号时,输入完“@”符号后。联想出经常使用的邮箱

点击某一行,将改行代表邮箱自己主动输入到账号输入框内

假设控件属性不懂或者不认识 ,请百度!

说一下原理。首先我们要推断输入的是否是“@”。之后在在进行范围截取,最后匹配

- (BOOL)hasPrefix:(NSString *)aString //系统 已经提供了匹配方法,用不着正则!  
 直接上代码!

#import "UserLoginViewController.h"

@interface
UserLoginViewController ()<UITextFieldDelegate,UITableViewDataSource,UITableViewDelegate>

{

BOOL _showList;

}

@property (nonatomic)UITextField *accountTextField;

@property (nonatomic)UITableView *listTableView;

@property (nonatomic)NSArray *emalArray;//邮箱后缀

@property (nonatomic)NSMutableArray *tabviewData;//server数据

- (void)dealloc

{

[selfunregisterNotifications];

}

- (void)viewDidLoad {

[superviewDidLoad];

[selfregisterNotifications];

_showList = NO;//默认不显示

self.emalArray = [[NSArray alloc] initWithObjects:@"sohu.com",@"sina.com",@"sina.cn",@"163.com",@"126.com",@"qq.com",@"hotmail.com",@"gmail.com", nil];

self.tabviewData = [NSMutableArray array];

_accountTextField= [selfcreateLoginField:@"手机号/username/邮箱/"];
 //此处自己定义控件  不会请百度

);

[self.view addSubview:_accountTextField];

//下拉列表

_listTableView = [[UITableViewalloc]initWithFrame:

,0,,)];

;

;

_listTableView.dataSource=self;

_listTableView.delegate=self;

_listTableView.bounces =NO;

_listTableView.backgroundColor= [UIColorwhiteColor];

_listTableView.separatorColor= [UIColorlightGrayColor];

_listTableView.hidden=!_showList;//一開始listView是隐藏的。此后依据showList的值显示或隐藏

[self.viewaddSubview:_listTableView];

// Do any additional setup after loading the view.

}

-(BOOL)showList{//setShowList:No为隐藏,setShowList:Yes为显示

return_showList;

}

-(void)setShowList:(BOOL)iShow{

_showList=iShow;

_listTableView.hidden=!iShow;

}

核心代码

#pragma mark UITextFieldDelegate

- (BOOL)textFieldShouldReturn:(UITextField *)textField

{

[[[UIApplicationsharedApplication]keyWindow]endEditing:YES];

return
YES;

}

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range
replacementString:(NSString *)string

{

//推断text是否输入过@假设输入过则不出现下啦菜单

NSString *text = [textField.textstringByReplacingCharactersInRange:rangewithString:string];

if (textField ==_accountTextField) {

//是否包括@

if ([textcontainsString:@"@"]) {

//抱歉 这是IOS8方法 
此处能够替换为      ([text rangeOfString:@"@"].location !=NSNotFound)

[selfsetShowList:YES];

[self.tabviewDataremoveAllObjects];

//范围

NSRange range = [textrangeOfString:@"@"];

if ((range.location + range.length) == text.length)
{

for (NSString *strinself.emalArray)
{

[self.tabviewDataaddObject:[NSStringstringWithFormat:@"%@%@",text,str]];

}

}else{

NSString *suffix = [textsubstringWithRange:NSMakeRange(range.location+range.length,
text.length-(range.location+range.length))];

,range.location+range.length)];

for (NSString *strinself.emalArray)
{

//匹配

if ([strhasPrefix:suffix]) {

[self.tabviewDataaddObject:[NSStringstringWithFormat:@"%@%@",headText,str]];

}

}

)
{

[selfsetShowList:NO];

}

}

[self.listTableViewreloadData];

}else

{

[selfsetShowList:NO];

}

}

return
YES;

}


- (BOOL)textFieldShouldClear:(UITextField *)textField

{

//返回一个BOOL值指明是否同意依据用户请求清除内容

//能够设置在特定条件下才同意清除内容

[selfsetShowList:NO];

return
YES;

}

#pragma  mark 监听键盘

- (void)registerNotifications

{

[[NSNotificationCenterdefaultCenter]addObserver:selfselector:@selector(textFiledEditChanged:)

name:@"UITextFieldTextDidChangeNotification"

object:nil];

}

- (void)unregisterNotifications

{

//移除通知

[[NSNotificationCenterdefaultCenter]removeObserver:self];

}

- (void)textFiledEditChanged:(NSNotification *)obj

{

//此处能够拿到 正在输入的值 做一些处理

}


#pragma mark listViewdataSource method and delegate method

-(NSInteger)tableView:(UITableView *)table numberOfRowsInSection:(NSInteger)section{

returnself.tabviewData.count;

}

-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath
*)indexPath{

staticNSString *cellid=@"listviewid";

UITableViewCell* cell=[tableViewdequeueReusableCellWithIdentifier:cellid];

if(cell==nil){

cell=[[UITableViewCellalloc]initWithStyle:UITableViewCellStyleDefault

reuseIdentifier:cellid];

cell.layer.borderColor = [UIColorgrayColor].CGColor;

cell.;

}

);

cell.textLabel.text = [self.tabviewDataobjectAtIndex:indexPath.row];

cell.textLabel.font =_accountTextField.font;

return cell;

}

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath
*)indexPath

{

return
40;

}

//当选择下拉列表中的一行时,设置文本框中的值,隐藏下拉列表

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath
*)indexPath

{

//显示值

NSString *string = [self.tabviewDataobjectAtIndex:indexPath.row];

_accountTextField.text = string;

[selfsetShowList:NO];

}


版权声明:本文博客原创文章,博客,未经同意,不得转载。

IOS-UITextField-邮箱后缀联想赛的更多相关文章

  1. 应用emailAutoComplete.js来自动显示邮箱后缀列表

    我们经常有邮箱的人都特别清楚,在输入我们的邮箱时,会自动显示出邮箱后缀列表,这个用户体验是不错的. 操作据悉——当我们输入文字时,会自动有个邮箱后缀名的列表.      而我这边的代码是,应用jque ...

  2. JavaScript实现邮箱后缀提示功能

    先来个基础的 需求 根据下面需求实现如示意图所示的邮箱输入提示功能,注意,根据要求只需实现下面功能 当用户没有任何输入时,提示框消失 当用户输入字符后,显示提示框,并且把用户输入的内容自动拼上邮箱后缀 ...

  3. iOS - UITextfield 验证邮箱格式

    做登录界面时,用户在UITextfield中输入输入邮箱账号后,我们应该在本地验证格式是否正确,再将参数传给服务器验证. 最简单的就是利用系统的NSPredicate //利用正则表达式验证 -(BO ...

  4. iOS 验证邮箱手机号格式

    做登录界面时,用户在UITextfield中输入输入邮箱账号后,我们应该在本地验证格式是否正确,再将参数传给服务器验证. 最简单的就是利用系统的NSPredicate //利用正则表达式验证 -(BO ...

  5. iOS - UITextField

    前言 NS_CLASS_AVAILABLE_IOS(2_0) @interface UITextField : UIControl <UITextInput, NSCoding> @ava ...

  6. iOS 手机 邮箱 正则表达式

    //iOS代码//判断邮箱格式是否正确的代码: //利用正则表达式验证 -(BOOL)isValidateEmail:(NSString *)email { NSString *emailRegex ...

  7. IOS UITextField &UITextView

    UITextField 限制textField长度 曾经,以为输入框只是输入字符的,但真的认真为一个登陆界面输入框而改了六七次以后,发现好烦人啊,先谢谢测试的不厌其烦,不杀之恩,不想再用IOS的输入框 ...

  8. iOS UITextField的代理<UITextFieldDelegate>的几点笔记

    今天做项目的时候,有个需求,点击按钮,就在特定的编辑框输入按钮中的文字,一开始我还以C++的思想来写,先获取光标的位置,然后在判断是否在那个编辑框,进行输入.后来我旁边的同事看到了直接教我用代理方法, ...

  9. 基于jquery的邮箱输入联想插件开发

    js代码: /*create by code_bunny 20140701 973295131@qq.com https://github.com/OOP-Code-Bunny */ (functio ...

随机推荐

  1. (摘录)MSMQ的简单介绍

    MSMQ(MicroSoft  Message  Queue,微软消息队列)是在多个不同的应用之间实现相互通信的一种异步传输模式,相互通信的应用可以分布于同一台机器上,也可以分布于相连的网络空间中的任 ...

  2. 小细节--Extjs中,renderTo 和applyTo的区别

    说到web前端框架,extjs绝对算是非常优秀的一个. extjs中,两个方法很像,renderTo和applyTo,我在网上也搜了很多相关的内容,在这里举例为大家进行区分,欢迎大家交流指正. 主要区 ...

  3. qt之正则表达式

    原地址:http://blog.csdn.net/phay/article/details/7304455 QRegExp是Qt的正则表达式类.Qt中有两个不同类的正则表达式.第一类为元字符.它表示一 ...

  4. h和.cpp文件的区别

    关于头文件和源文件的分别 首先,我们可以将所有东西都放在一个.cpp文件内. 然后编译器就将这个.cpp编译成.obj,obj是什么东西? 就是编译单元了.一个程序,可以由一个编译单元组成, 也可以有 ...

  5. android设置背景图片透明

    设置Activiyt为透明可以在Activity中引用系统透明主题android:theme="@android:style/Theme.Translucent" 设置背景图片透明 ...

  6. Android程序检测网络是否可用

    在做Android应用程序中,连接网络的时候,常常要用到检测网络状态是否可用,在这里分享一个比较好用的方法. 本人参考:http://blog.csdn.net/sunboy_2050/article ...

  7. cocos2dx3.2 异步载入和动态载入

    半个月没有更新博客,从这个项目開始学习了非常多细节的东西,都不太成系统.可是却是开发上线中必须经历的东西.比方超级玛丽系列(一)中的正确的异步载入,正确的分层.正确的合成和载入plist.及时的移除未 ...

  8. DRP分销系统总结

    上个月看完的分销系统的视频,用了漫长的时间看这个项目视频,能安慰自己的是不光是看视频了,还做了很多自己想做的事情,比如驾照拿下来了,比如参加了一些考试,比如讲了一些课程等等.把这个系统的总结总算是补上 ...

  9. appium 真机测试问题 出现 instruments crashed on startup

    1.appium 真机测试的时候 instruments crashed on startup,必须在真机上打开UI Automation 在设置里: Developer->Enable UI ...

  10. jquery控制动态生成的gridview中多列checkbox的全选反选及自动判断是否全选状态

    动态生成的Gridview的前台html代码如下:     <table class="usertableborder" cellspacing="0" ...