OC 自定义身份证键盘

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值