OC仿支付宝输入UITextField输入车牌号
效果图,如果使用,出现任何问题请告知,或者下方留言,我好以及改正
.h文件:
- #import <UIKit/UIKit.h>
- @interface LicenseKeyBoardView : UIView
- - (instancetype)initWithFrame:(CGRect)frame withTextField:(UITextField *)textField;
- @end
.m文件
- #import "LicenseKeyBoardView.h"
- #define kWidth [UIScreen mainScreen].bounds.size.width
- #define kHeight [UIScreen mainScreen].bounds.size.height
- #define HEXCOLOR(hex, alp) [UIColor colorWithRed:((float)((hex & 0xFF0000) >> 16)) / 255.0 green:((float)((hex & 0xFF00) >> 8)) / 255.0 blue:((float)(hex & 0xFF)) / 255.0 alpha:alp]
- #define LicenseLength 7 //最大的车牌号长度为7
- @interface LicenseKeyBoardView()<UIGestureRecognizerDelegate>
- {
- UIView *_backView1; //第一个view 省份
- UIView *_backView2; //第二个view 字母view
- UIButton *_btn;//abc和返回按键
- }
- @property (nonatomic, strong) NSArray *provinceArr; //省市简写数组
- @property (nonatomic, strong) NSArray *letterArr; //车牌号码字母数字数组
- @property(nonatomic,strong)UITextField *textField;
- @end
- @implementation LicenseKeyBoardView
- - (NSArray *)provinceArr {
- if (!_provinceArr) {
- _provinceArr = @[@"京",@"津",@"渝",@"沪",@"冀",@"晋",@"辽",@"吉",@"黑",@"苏",@"浙",@"皖",@"闽",@"赣",@"鲁",@"豫",@"鄂",@"湘",@"粤",@"琼",@"川",@"贵",@"云",@"陕",@"甘",@"青",@"蒙",@"桂",@"宁",@"新",@"",@"藏",@"使",@"领",@"警",@"学",@"港",@"澳",@""];
- }
- return _provinceArr;
- }
- - (NSArray *)letterArr {
- if (!_letterArr) {
- _letterArr = @[@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9",@"0",@"Q",@"W",@"E",@"R",@"T",@"Y",@"U",@"I",@"O",@"P",@"A",@"S",@"D",@"F",@"G",@"H",@"J",@"K",@"L",@"",@"Z",@"X",@"C",@"V",@"B",@"N",@"M",@""];
- }
- return _letterArr;
- }
- - (instancetype)initWithFrame:(CGRect)frame withTextField:(UITextField *)textField{
- frame = CGRectMake(0, 0, kWidth, kHeight*0.33);
- if (self = [super initWithFrame:frame]) {
- self.backgroundColor = [UIColor redColor];
- self.textField = textField;
- //注册一个通知,后面会用到,来监听abc字母键
- [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textFAction:) name:@"abc" object:nil];
- //添加一个手势,点击键盘外面收回键盘
- UITapGestureRecognizer *recognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(hiddenView)];
- recognizer.delegate = self;
- [self addGestureRecognizer:recognizer];
- [self setupUI];
- }
- return self;
- }
- - (void)setupUI {
- CGSize size = self.frame.size;
- _backView1 = [[UIView alloc] initWithFrame:self.bounds];
- _backView1.backgroundColor = HEXCOLOR(0xd2d5da, 1);
- _backView1.hidden = NO;
- _backView2 = [[UIView alloc] initWithFrame:self.bounds];
- _backView2.hidden = YES;
- _backView2.backgroundColor = HEXCOLOR(0xd2d5da, 1);
- [self addSubview:_backView1];
- [self addSubview:_backView2];
- int row = 4;
- int column = 10;
- CGFloat btnY = 4;
- CGFloat btnX = 2;
- CGFloat maginR = 5;
- CGFloat maginC = 10;
- CGFloat btnW = (size.width - maginR * (column -1) - 2 * btnX)/column;
- CGFloat btnH = (_backView1.frame.size.height - maginC * (row - 1) - 6) / row;
- CGFloat m = 12;
- CGFloat w = (size.width - 24 - 7 * btnW - 6 * maginR - 2 * btnX)/2;
- CGFloat mw = (size.width - 8 * maginR - 9 * btnW - 2 * btnX) / 2;
- NSLog(@"LY >> count - %zd", self.provinceArr.count);
- for (int i = 0; i < self.provinceArr.count; i++) {
- UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
- if (i / column == 3) {
- if (i == 30) {
- btn.frame = CGRectMake(btnX, btnY + 3 * (btnH + maginC), w, btnH);
- [btn setBackgroundImage:[UIImage imageNamed:@"key_abc"] forState:UIControlStateNormal];
- btn.enabled = NO;
- _btn = btn;
- }else if (i == 38) {
- btn.frame = CGRectMake(6 * (btnW + maginR) + btnW + w + m + m, btnY + 3 * (btnH + maginC), w, btnH);
- [btn setBackgroundImage:[UIImage imageNamed:@"key_over"] forState:UIControlStateNormal];
- }else {
- btn.frame = CGRectMake((i % column - 1)*(btnW + maginR) + w + m + btnX, btnY + 3 * (btnH + maginC), btnW, btnH);
- [btn setBackgroundImage:[UIImage imageNamed:@"key_number"] forState:UIControlStateNormal];
- }
- }else {
- btn.frame = CGRectMake(btnW * (i % column) + i % column * maginR + btnX, btnY + i/column * (btnH + maginC), btnW, btnH);
- [btn setBackgroundImage:[UIImage imageNamed:@"key_number"] forState:UIControlStateNormal];
- }
- [btn setTitleColor:HEXCOLOR(0x23262F, 1) forState:UIControlStateNormal];
- [btn setTitle:self.provinceArr[i] forState:UIControlStateNormal];
- btn.layer.cornerRadius = 3;
- btn.layer.masksToBounds = YES;
- btn.tag = i;
- [btn addTarget:self action:@selector(btn1Click:) forControlEvents:UIControlEventTouchUpInside];
- [_backView1 addSubview:btn];
- }
- for (int i = 0; i < self.letterArr.count; i++) {
- UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
- if (i >= 20 && i < 29) {
- btn.frame = CGRectMake(btnX + mw + (btnW + maginR) * (i % column), btnY + 2 * (btnH + maginC), btnW, btnH);
- [btn setBackgroundImage:[UIImage imageNamed:@"key_number"] forState:UIControlStateNormal];
- }else if (i >= 29) {
- if (i == 29) {
- btn.frame = CGRectMake(btnX, btnY + 3 * (btnH + maginC), w, btnH);
- [btn setBackgroundImage:[UIImage imageNamed:@"key_back"] forState:UIControlStateNormal];
- }else if (i == 37) {
- btn.frame = CGRectMake(6 * (btnW + maginR) + btnW + w + m + m + btnX, btnY + 3 * (btnH + maginC), w, btnH);
- [btn setBackgroundImage:[UIImage imageNamed:@"key_over"] forState:UIControlStateNormal];
- }else {
- btn.frame = CGRectMake((i % column)*(btnW + maginR) + w + m + btnX, btnY + 3 * (btnH + maginC), btnW, btnH);
- [btn setBackgroundImage:[UIImage imageNamed:@"key_number"] forState:UIControlStateNormal];
- }
- }else {
- btn.frame = CGRectMake(btnW * (i % column) + i % column * maginR + btnX, btnY + i/column * (btnH + maginC), btnW, btnH);
- [btn setBackgroundImage:[UIImage imageNamed:@"key_number"] forState:UIControlStateNormal];
- }
- [btn setTitleColor:HEXCOLOR(0x23262F, 1) forState:UIControlStateNormal];
- [btn setTitle:self.letterArr[i] forState:UIControlStateNormal];
- btn.layer.cornerRadius = 3;
- btn.layer.masksToBounds = YES;
- btn.tag = i;
- [btn addTarget:self action:@selector(btn2Click:) forControlEvents:UIControlEventTouchUpInside];
- [_backView2 addSubview:btn];
- }
- }
- - (void)btn1Click:(UIButton *)sender {
- // NSLog(@" >>> provinceArr: - %@ -- tag - %zd", self.provinceArr[sender.tag],sender.tag);
- _btn.enabled = YES;
- if (sender.tag == 30) {
- // NSLog(@"点击了abc键");
- if (_backView2.hidden) {
- // NSLog(@"_backView2 隐藏了");
- _backView1.hidden = YES;
- _backView2.hidden = NO;
- }else {
- sender.enabled = NO;
- }
- }else if (sender.tag == 38){
- // 点击删除键
- if (_backView2.hidden) {
- [self deleteBtnClick];
- }
- }else {
- //点击汉字字母或者数字键
- _backView1.hidden = YES;
- _backView2.hidden = NO;
- if(self.textField.text.length < LicenseLength){
- [self.textField insertText:self.provinceArr[sender.tag]];
- }
- }
- }
- - (void)btn2Click:(UIButton *)sender {
- if (sender.tag == 29) {
- // NSLog(@"点击了abc键");
- _backView1.hidden = NO;
- _backView2.hidden = YES;
- }else if (sender.tag == 37) {
- // NSLog(@"点击了删除键");
- [self deleteBtnClick];
- }else {
- if(self.textField.text.length < LicenseLength){
- [self.textField insertText:self.letterArr[sender.tag]];
- }
- }
- }
- - (void)deleteBtnClick{
- [self.textField deleteBackward];
- if (self.textField.text.length == 1) {
- //删除完了,没有字符可以删除了,切换显示的view
- [self deleteEnd];
- }
- }
- /**
- 如果textfield删除完毕,则显示省份
- */
- - (void)deleteEnd {
- _backView1.hidden = NO;
- _backView2.hidden = YES;
- }
- //通知的监听方法
- - (void)textFAction:(NSNotification *)notification {
- // NSLog(@" >> info -- %@", notification.userInfo);
- NSString *str = notification.userInfo[@"text"];
- if (str.length == 0) {
- _btn.enabled = NO;
- }else if (str.length == 7) {
- [self hiddenView];
- }else {
- _backView1.hidden = YES;
- _backView2.hidden = NO;
- _btn.enabled = YES;
- }
- }
- //初次弹出键盘时
- - (void)showWithString:(NSString *)string {
- // NSLog(@" >> string -- %@", string);
- _backView1.hidden = YES;
- _backView2.hidden = NO;
- _btn.enabled = YES;
- }
- //收回键盘
- - (void)hiddenView {
- CGSize size = [UIScreen mainScreen].bounds.size;
- [UIView animateWithDuration:0.3 animations:^{
- CGRect frame = self->_backView1.frame;
- frame.origin.y = size.height;
- self->_backView1.frame = frame;
- } completion:^(BOOL finished) {
- [self removeFromSuperview];
- }];
- [UIView animateWithDuration:0.3 animations:^{
- CGRect frame = self->_backView2.frame;
- frame.origin.y = size.height;
- self->_backView2.frame = frame;
- } completion:^(BOOL finished) {
- [self removeFromSuperview];
- }];
- }
- //手势的代理方法
- #pragma mark >> UIGestureRecognizerDelegate
- - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
- if ([touch.view isDescendantOfView:_backView1] ||
- [touch.view isDescendantOfView:_backView2] ) {
- return NO;
- }
- return YES;
- }
- //销毁通知
- - (void)dealloc {
- [[NSNotificationCenter defaultCenter] removeObserver:self];
- }
- @end
使用:
该封装使用了四张图片:
OC仿支付宝输入UITextField输入车牌号的更多相关文章
- iOS开发-通过正则表达式进行各种判断银行卡,车牌号,邮箱地址,QQ,身份证,全字母,仅输入字母或数字同时包含大小写字母和数字,仅能输入中文等
/* * 验证银行卡号是否正确 * 车牌号验证 * 检验邮箱地址是否正确 * 手机号中间四位密文显示 * 判断QQ号是否正确(5-11位) * 判断身份证号是否正确(如末位为字母请用“x” ...
- UITextField设置密文延时处理---仿QQ登录密码输入
系统的UITextField输入的时候最后一个字符会有1-2s的效果展示, 效果如下: 为了解决这个问题, 可以用字符 "●" 替换, 替换后效果如下: 用到的是UITextFie ...
- 限制 UITextField 输入长度
限制 UITextField 输入长度 标签(空格分隔): UITextField UITextField 是 iOS 中最经常使用的组件之中的一个.关于它也有各种各样的需求,这些需求是它本身没有提供 ...
- 限制UITextField输入长度
如果要限制UITextField输入长度最长不超过kMaxLength,那么需要实现做以下操作: 1.实现UITextFieldDelegate协议: 2.实现textField:shouldChan ...
- [ios仿系列]仿支付宝手势解码
呀~.这么快就转到ios阵营了???.android还有那么多坑呢???为此我也仅仅能啃着馒头留下屈辱的眼泪了. . 本次因为开发公司产品的android版,继而ios版也负责一部分.当中一部分就是手 ...
- vue实战 - 车牌号校验和银行校验
在看这篇文章之前,我建议大伙可以去把项目demo拉到本地看看.如果觉得写得不好,可以一起提提issues,一起维护.或者大伙有刚需,可以留言,后期会不断完善. 使用方法: git clone http ...
- iOS 仿支付宝密码支付
代码地址如下:http://www.demodashi.com/demo/11484.html 一.准备工作 xcode 主要实现输入密码的时候不可见 二.程序实现 实现思路怎样 在支付宝输入密码的时 ...
- iOS手机号,身份证,车牌号正则表达式
1.手机号判断,根据维基百科2016年6月修订的段号判断 是否是手机号 /** 手机号码 13[0-9],14[5|7|9],15[0-3],15[5-9],17[0|1|3|5|6|8],18[0- ...
- iOS-高仿支付宝手势解锁(九宫格)
概述 高仿支付宝手势解锁, 通过手势枚举去实现手势密码相对应操作. 详细 代码下载:http://www.demodashi.com/demo/10706.html 基上篇[TouchID 指纹解锁] ...
随机推荐
- 使用Profile和Resources Filter隔离测试环境
转自:http://juvenshun.iteye.com/blog/206825 Maven能够帮我们很好的管理测试,我们可以在 src/test/java 和 src/test/resources ...
- 基金 、 社保和QFII等机构的重仓股排名评测
来源:基金前20大重仓股持仓股排名 基金前15大重仓股持仓股排名 基金重仓前15大个股,相较于同期沪深300的平均收益, 近1月:2.23%, 近3月:3.09%, 近6月:9.61%, 近1年:13 ...
- Win 10来袭,人工智能女将打头阵
7月1日,微软小冰身"考官",其姐姐微软小娜(Cortana)解锁"科技动态"功能,为即将来临的Win 10打头阵. 中国IT产业界从来没有见过这样的阵势,难于 ...
- U3D常用题
最先执行的方法是:1.(激活时的初始化代码)Awake,2.Start.3.Update[FixUpdate.LateUpdate].4.(渲染模块)OnGUI.5.再向后,就是卸载模块(TearDo ...
- SQLServer2008 导出数据库表结构和数据
很多朋友问到sql server数据库”生成脚本”,只导出了数据库的sql脚本,而表里的数据依然没有导出来.很简单,看教程: 注:我这里用的SQLServer2008,其它版本应该差不多. 一.选中要 ...
- npm更新升级
更新 npm install npm -g
- 【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验五:按键模块④ — 点击,长点击,双击
实验五:按键模块④ - 点击,长点击,双击 实验二至实验四,我们一共完成如下有效按键: l 点击(按下有效) l 点击(释放有效) l 长击(长按下有效) l 双击(连续按下有效) 然而,不管哪个实验 ...
- Xcode连接TFS Git用户名和密码不正确解决方案
团队要将原来搭建的Git服务全部迁移到TFS的Git上统一管理,迁移的过程非常顺利.当要用Xcode或者SourceTree连接TFS Git(我们的TFS身份认证是基于Windows的,使用HTTP ...
- Cannot change version of project facet Dynamic Web Module to 3.0 异常问题处理
如何解决Tomcat服务器在初始化应用的时候的以下异常问题 1,Cannot change version of project facet Dynamic Web Module to 3.0 2,O ...
- yii2优化 - 开启 Schema 缓存
开启 Schema 缓存 Schema 缓存是一个特殊的缓存功能,每当你使用活动记录时应该要开启这个缓存功能.如你所知, 活动记录能智能检测数据库对象的集合(例如列名.列类型.约束)而不需要手动地描述 ...