简易验证码输入控件

2019-03-09  本文已影响0人  这世界总会好的

很早之前写的一个验证码输入控件,一直没时间整理一下,最近终于抽出时间可以做个分享。
先上图:


example1.png example2.png

功能介绍

功能比较简单:包括顺序输入及删除,点击验证码输入部分弹收起键盘。暂未实现随意输入及删除验证码。

核心代码

使用部分:

_codeView = [[VerifyCodeView alloc]initWithFrame:CGRectZero withCodeLength:4];
    __weak __typeof(self) weakSelf = self;
    _codeView.inputTextBlock = ^(NSString *text) {
        if ([text.lowercaseString isEqualToString:weakSelf.codeLabel.text.lowercaseString]) {
            [weakSelf alertTitle:@"校验成功"];
        }else{
            [weakSelf alertTitle:@"校验失败"];
        }
    }; 
    [self.view addSubview:_codeView];

实现原理:

for (int i = 0; i < self.maxCodeLength; i++) {/*创建多个textFiled实现多个验证码输入*/
        VerifyCodeTextField *textfield = [[VerifyCodeTextField alloc]init];
        textfield.tag = textFieldTag + i;
        textfield.delegate = self;
        textfield.deleteDelegate = self;
        ...
}

遇到的问题:
创建多个textfield,当删除输入码时,并不能从当前textfield回到上一个textfield中。
解决办法:自定义textfield继承UITextField,重写deleteBackward方法。

@implementation VerifyCodeTextField

- (void)deleteBackward{
    [super deleteBackward];
    if ([self.deleteDelegate respondsToSelector:@selector(verifyCodeTextFieldDelete:)]) {
        [self.deleteDelegate verifyCodeTextFieldDelete:self];
    }
}
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{
    return nil;
}

实现代理:

- (void)verifyCodeTextFieldDelete:(UITextField *)textField{/*删除验证码代理方法*/
    [self textFieldDeleteInputText:textField];
}

详见demo

上一篇 下一篇

猜你喜欢

热点阅读