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
原创粉丝点击