OC 自定义身份证键盘
来源:互联网 发布:计算机专业不喜欢编程 编辑:程序博客网 时间:2024/06/05 00:53
iOS 开发中有很多人可能会用到输入身份证的业务,但是系统提供的并没有这个接盘的类型,所以这里需要我们自定义键盘;
自定义键盘目前LZ了解的是两种方法:第一种是在系统的键盘上添加一个X;
第二种就是自己写一个View进行开发;
这里使用的是第二种方法自定义身份证键盘:
1.我们首先创建一个继承与UIView的类文件:DZKeyBoard (文件名字)里面使用枚举来列出我们键盘的类型
typedef enum : NSInteger { DZKeyBoardNumber = 0, //纯数字键盘 DZKeyBoardIDCard, //身份证号键盘 DZKeyBoardTyping, //正常26键盘} DZKeyBoardStyle;
之后我们就要写一个初始化方法了,外面调用需要传入一个枚举类型
> -(instancetype)initWithFrame:(CGRect)frame KeyboardType:(DZKeyBoardStyle)KeyboardType;
方法实现如下:
-(instancetype)initWithFrame:(CGRect)frame KeyboardType:(DZKeyBoardStyle)KeyboardType{ self = [super initWithFrame:frame]; if (self) { [self CreactkeyBoard:KeyboardType]; } return self;}-(void)CreactkeyBoard:(DZKeyBoardStyle)KeyboardType{ switch (KeyboardType) { case DZKeyBoardNumber:{ //纯数字键盘 [self CreactDZKeyBoardNumber:self.numberArray]; } break; case DZKeyBoardIDCard:{ //身份证号键盘 } break; case DZKeyBoardTyping:{ //打字键盘 } break; default: break; }}-(void)CreactDZKeyBoardNumber:(NSArray *)array{ NSLog(@"纯数字======%@======%lu",array,(unsigned long)array.count); NSInteger index = 0; for (NSInteger i = 0; i < 4; i++) { //先遍历行 x for (NSInteger j = 0; j < 3; j++) { //在遍历列 y UIButton *numberBtn = [UIButton buttonWithType:UIButtonTypeCustom]; numberBtn.backgroundColor = [UIColor colorWithRed:245 green:245 blue:245 alpha:1]; numberBtn.frame = CGRectMake(kWidth/3*j, kWidth/3/2*i, kWidth/3, kWidth/3/2); [numberBtn setTitle:_numberArray[index] forState:UIControlStateNormal]; numberBtn.titleLabel.textAlignment = NSTextAlignmentCenter; numberBtn.tag = 1000+index; [numberBtn setTitleColor:[UIColor redColor] forState:UIControlStateHighlighted]; [numberBtn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; [self drawActionWithBtn:numberBtn]; [numberBtn addTarget:self action:@selector(clickAction:) forControlEvents:UIControlEventTouchUpInside]; [self addSubview:numberBtn]; index++; } }}
记得要写一个键盘数组:
-(NSArray *)numberArray{ if (!_numberArray) { _numberArray = @[@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9", @"X",@"0",@"删除"]; } return _numberArray;}
如果要求要高的,我们可以使用这个划线方法,这样子看起来效果绝对会很美:
- (void)drawActionWithBtn:(UIButton *)sender{ UIBezierPath *bottomPath = [UIBezierPath bezierPath]; if (sender.tag < 1009) { [bottomPath moveToPoint:CGPointMake(0, CGRectGetHeight(sender.frame))]; [bottomPath addLineToPoint:CGPointMake(CGRectGetWidth(sender.frame), CGRectGetHeight(sender.frame))]; [bottomPath addLineToPoint:CGPointMake(CGRectGetWidth(sender.frame), 0)]; if (sender.tag < 1003) { [bottomPath addLineToPoint:CGPointMake(0, 0)]; } }else{ [bottomPath moveToPoint:CGPointMake(CGRectGetWidth(sender.frame), 0)]; [bottomPath addLineToPoint:CGPointMake(CGRectGetWidth(sender.frame), CGRectGetHeight(sender.frame))]; } CAShapeLayer *layer = [CAShapeLayer layer]; layer.bounds = sender.bounds; layer.position = CGPointMake(sender.frame.size.width/2, sender.frame.size.height/2); layer.strokeColor = [UIColor colorWithRed:240/255.0 green:246/255.0 blue:243/255.0 alpha:1].CGColor; layer.fillColor = [UIColor clearColor].CGColor; layer.path = bottomPath.CGPath; [sender.layer addSublayer:layer];}
接下来就是外面的调用了
-(UITextField *)dz_textfield{ if (!_dz_textfield) { _dz_textfield = [DZUITextField DZTextFieldFrame:CGRectMake(50, 100, 300, 40) BorderStyle:UITextBorderStyleRoundedRect placeholder:@"请输入密码" clearButtonModel:UITextFieldViewModeAlways]; _dz_textfield.tintColor = [UIColor redColor]; [_dz_textfield.inputView removeFromSuperview]; _dz_textfield.inputView = self.dz_keyBoard; _dz_textfield.delegate = self; } return _dz_textfield;}-(DZKeyBoard *)dz_keyBoard{ if (!_dz_keyBoard) { _dz_keyBoard = [[DZKeyBoard alloc]initWithFrame:CGRectMake(0, KHEIGHT-KWIDTH/3/2*4, KWIDTH, KWIDTH/3/2*4) KeyboardType:DZKeyBoardNumber]; _dz_keyBoard.Keydelegate = self; _dz_keyBoard.hidden = YES; _dz_keyBoard.backgroundColor = [UIColor clearColor]; } return _dz_keyBoard;}
这里我们要先初始下我们的键盘和一个输入框,这个时候你会发现,键盘出来了,但是没有光标,所以我们要拿到光标,并且还要把系统的键盘给隐藏掉,这个时候我们可以移除系统的键盘,并且刷新键盘的inputView;
- (void)dzBackValueWithButton:(UIButton *)sender{ [sender setHighlighted:YES]; if (!(sender.tag == 1011)) { _dz_textfield.text = [NSString stringWithFormat:@"%@%@", _dz_textfield.text, sender.titleLabel.text]; }else{ if ([_dz_textfield.text length] != 0) { [_dz_textfield deleteBackward]; }else{ _dz_keyBoard.hidden = YES; [_dz_textfield resignFirstResponder]; } } [self.dz_textfield reloadInputViews];}-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ _dz_keyBoard.hidden = YES; [_dz_textfield resignFirstResponder];}- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{ _dz_keyBoard.hidden = NO; [_dz_textfield.inputView removeFromSuperview]; [self.dz_textfield reloadInputViews]; return YES;}
到这里就全部结束了,代码地址:https://github.com/BenHuGZX/DZKeyBoard
@end
0 0
- OC 自定义身份证键盘
- 自定义身份证键盘
- iOS自定义身份证键盘
- iOS-OC-自定义键盘
- 自定义键盘(纯数字键盘、小数点键盘、身份证键盘)
- iOS身份证键盘
- 身份证末尾校验位计算OC
- oc 键盘大全
- oc 键盘大全
- 自定义键盘
- 自定义键盘
- 自定义键盘
- 键盘自定义
- 自定义键盘
- 自定义键盘
- 自定义键盘
- 自定义键盘
- 自定义键盘
- 遮罩层添加
- 【PHP】别名函数之die()与exit()的真正区别
- Linux中用st_mode判断文件类型
- 欢迎使用CSDN-markdown编辑器
- 《深度探索C++对象模型(Inside The C++ Object Model )》学习笔记
- OC 自定义身份证键盘
- java多态的理解
- PO、VO、BO、DTO、POJO、DAO 详解
- ITKEE.CN
- C语言学习笔记-结构体、共用体、枚举
- Oracle与Sql Serer的链接桥梁之透明网关的部署与配置详解(一)部署环境描述
- 比特币源码linux下环境配置编译运行bitcoin
- java图片添加水印文字
- 浏览器自动填写问卷或者单选/表单等