IOS-UITextField-邮箱后缀联想赛
最近做的项目,有一个函数,百度了一下 结果没 要研究了一下。
当用户输入邮箱形式的账号时,输入完“@”符号后。联想出经常使用的邮箱
点击某一行,将改行代表邮箱自己主动输入到账号输入框内
假设控件属性不懂或者不认识 ,请百度!
说一下原理。首先我们要推断输入的是否是“@”。之后在在进行范围截取,最后匹配
- (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-邮箱后缀联想赛的更多相关文章
- 应用emailAutoComplete.js来自动显示邮箱后缀列表
我们经常有邮箱的人都特别清楚,在输入我们的邮箱时,会自动显示出邮箱后缀列表,这个用户体验是不错的. 操作据悉——当我们输入文字时,会自动有个邮箱后缀名的列表. 而我这边的代码是,应用jque ...
- JavaScript实现邮箱后缀提示功能
先来个基础的 需求 根据下面需求实现如示意图所示的邮箱输入提示功能,注意,根据要求只需实现下面功能 当用户没有任何输入时,提示框消失 当用户输入字符后,显示提示框,并且把用户输入的内容自动拼上邮箱后缀 ...
- iOS - UITextfield 验证邮箱格式
做登录界面时,用户在UITextfield中输入输入邮箱账号后,我们应该在本地验证格式是否正确,再将参数传给服务器验证. 最简单的就是利用系统的NSPredicate //利用正则表达式验证 -(BO ...
- iOS 验证邮箱手机号格式
做登录界面时,用户在UITextfield中输入输入邮箱账号后,我们应该在本地验证格式是否正确,再将参数传给服务器验证. 最简单的就是利用系统的NSPredicate //利用正则表达式验证 -(BO ...
- iOS - UITextField
前言 NS_CLASS_AVAILABLE_IOS(2_0) @interface UITextField : UIControl <UITextInput, NSCoding> @ava ...
- iOS 手机 邮箱 正则表达式
//iOS代码//判断邮箱格式是否正确的代码: //利用正则表达式验证 -(BOOL)isValidateEmail:(NSString *)email { NSString *emailRegex ...
- IOS UITextField &UITextView
UITextField 限制textField长度 曾经,以为输入框只是输入字符的,但真的认真为一个登陆界面输入框而改了六七次以后,发现好烦人啊,先谢谢测试的不厌其烦,不杀之恩,不想再用IOS的输入框 ...
- iOS UITextField的代理<UITextFieldDelegate>的几点笔记
今天做项目的时候,有个需求,点击按钮,就在特定的编辑框输入按钮中的文字,一开始我还以C++的思想来写,先获取光标的位置,然后在判断是否在那个编辑框,进行输入.后来我旁边的同事看到了直接教我用代理方法, ...
- 基于jquery的邮箱输入联想插件开发
js代码: /*create by code_bunny 20140701 973295131@qq.com https://github.com/OOP-Code-Bunny */ (functio ...
随机推荐
- Amlogic开关机按键功能实现
在做AMlogic项目的时候,配置按键后,发现电源键仅仅能关机,不能开机,非常是郁闷 后来发现是漏掉了一个地方没有配置,firmware/arc_power/irremote2arc.c 这个文件中面 ...
- POJ 2031 prim
Building a Space Station Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 4400 Accepted: 2 ...
- Android ListView 常见问题与使用总结
一.机制 ListView机制 - 先运行getCount.然后运行getView. 假设getCount返回0,不运行getView Gallery convertView不会复用.每次都返回NUL ...
- How to Create a Java Concurrent Program
In this Document Goal Solution Overview Steps in writing Java Concurrent Program Template ...
- C#的事件处理机制
链接地址:http://blog.csdn.net/niuox/article/details/7527876 在以往的关于事件处理的程序中,我们更多的是采用一种循环等待的方式,即为了检测某个事件是否 ...
- OC-多线程安全隐患及一般解决办法
1.多线程的安全隐患1.1>一块资源可能被多个线程共享,也就是多个线程可能会访问同一块资源,如多个线程访问同一个对象,变量,文件等当多个线程访问同一块资源时,很容易引发数据错乱和数据安全问题1. ...
- c:foreach如何嵌套循环,求指教,求优化
java类: public class PopedomItem { private String id; private String pid; private String name; privat ...
- 【Unity技巧】使用单例模式Singleton
这几天想把在实习里碰到的一些好的技巧写在这里,也算是对实习的一个总结.好啦,今天要讲的是在Unity里应用一种非常有名的设计模式——单例模式. 开场白 单例模式的简单介绍请看前面的链接,当然网上还有很 ...
- 推荐国内外优秀+免费CDN加速站点及公共cdn加速库
-----------------------------------------------------------------免费CDN加速站点 1.CloudFlare CloudFlare可能 ...
- 嵌入式ntp服务器的移植
一.交叉编译 1.官网下载http://www.ntp.org/点击download选项页 我的版本是ntp-4.2.6p5.tar.gz 2.解压 tar -zxvf ntp-4.2.6p5.tar ...