196 lines
5.4 KiB
Objective-C
196 lines
5.4 KiB
Objective-C
//
|
|
// LoginVerifCodeView.m
|
|
// YUMI
|
|
//
|
|
// Created by YUMI on 2021/9/8.
|
|
//
|
|
|
|
#import "LoginVerifCodeView.h"
|
|
///第三方
|
|
#import <Masonry/Masonry.h>
|
|
#import <ReactiveObjC/ReactiveObjC.h>
|
|
///Tool
|
|
#import "DJDKMIMOMColor.h"
|
|
|
|
@interface LoginVerifCodeView ()
|
|
///输入框的占位符
|
|
@property (nonatomic,strong) MSBaseTextField *textField;
|
|
///显示label的数组
|
|
@property (nonatomic,strong) NSMutableArray<UILabel *> *labelArray;
|
|
@end
|
|
|
|
@implementation LoginVerifCodeView
|
|
|
|
- (instancetype)initWithFrame:(CGRect)frame
|
|
{
|
|
self = [super initWithFrame:frame];
|
|
if (self) {
|
|
[self initSubViews];
|
|
[self initSubViewConstraints];
|
|
[self initEvents];
|
|
}
|
|
return self;
|
|
}
|
|
|
|
#pragma mark - Private Method
|
|
- (void)initSubViews {
|
|
[self addSubview:self.textField];
|
|
}
|
|
|
|
- (void)initSubViewConstraints {
|
|
[self.textField mas_makeConstraints:^(MASConstraintMaker *make) {
|
|
make.edges.mas_equalTo(self);
|
|
}];
|
|
}
|
|
|
|
- (void)initEvents {
|
|
@weakify(self);
|
|
[[self.textField rac_signalForControlEvents:UIControlEventEditingChanged] subscribeNext:^(__kindof UITextField *textField) {
|
|
@strongify(self);
|
|
[self updateLablesWithText:textField];
|
|
}];
|
|
}
|
|
|
|
- (void)updateLablesWithText:(UITextField *)textField {
|
|
if (textField.text.length > self.labelArray.count) {
|
|
textField.text = [textField.text substringToIndex:self.labelArray.count];
|
|
}
|
|
if (textField.text.length >= self.number) {
|
|
[textField resignFirstResponder];
|
|
if (_textFieldChangeBlock) {
|
|
_textFieldChangeBlock(textField.text);
|
|
}
|
|
}
|
|
|
|
if (self.type == 1) {
|
|
@kWeakify(self);
|
|
[self.labelArray enumerateObjectsUsingBlock:^(UILabel *obj, NSUInteger idx, BOOL *stop) {
|
|
@kStrongify(self);
|
|
[self normalStyle:obj];
|
|
}];
|
|
}
|
|
NSInteger index = -1;
|
|
for (UILabel *pwLab in self.labelArray) {
|
|
if (pwLab.tag < (100 + textField.text.length)) {
|
|
if (self.shouldBeSecurity) {
|
|
pwLab.text = @"●";
|
|
index += 1;
|
|
} else {
|
|
NSRange range = NSMakeRange(pwLab.tag-100, 1);
|
|
pwLab.text = [textField.text substringWithRange:range];
|
|
}
|
|
}else{
|
|
pwLab.text = @"";
|
|
}
|
|
}
|
|
|
|
if (self.type == 1) {
|
|
UILabel *label = [self.labelArray xpSafeObjectAtIndex:index];
|
|
if (label) {
|
|
[self lastInputStyle:label];
|
|
}
|
|
}
|
|
}
|
|
|
|
- (void)configLabelArray {
|
|
CGFloat itemWidth = 45;
|
|
CGFloat itemHeight = 45;
|
|
CGFloat itemSpace = 11;
|
|
for (int i = 0; i < _number; i++) {
|
|
UILabel * label = [[UILabel alloc] init];
|
|
label.textColor = [DJDKMIMOMColor mainTextColor];
|
|
label.font = [UIFont fontWithName:@"PingFang-SC-Medium" size:18];
|
|
label.textAlignment = NSTextAlignmentCenter;
|
|
label.backgroundColor = UIColorFromRGB(0xf4f4f4);
|
|
[label setCornerRadius:10];
|
|
label.tag = 100 + i;
|
|
[self addSubview:label];
|
|
[label mas_makeConstraints:^(MASConstraintMaker *make) {
|
|
make.size.mas_equalTo(CGSizeMake(itemWidth, itemHeight));
|
|
make.centerY.mas_equalTo(self);
|
|
make.leading.mas_equalTo(self).offset((itemWidth + itemSpace)* i);
|
|
}];
|
|
[self.labelArray addObject:label];
|
|
}
|
|
|
|
UILabel * label = [self.labelArray lastObject];
|
|
if (label) {
|
|
[self mas_makeConstraints:^(MASConstraintMaker *make) {
|
|
make.trailing.mas_equalTo(label.mas_trailing);
|
|
make.height.mas_equalTo(itemHeight);
|
|
}];
|
|
}
|
|
}
|
|
|
|
- (void)configLabelArrayOfGiveDiamond {
|
|
CGFloat itemWidth = kGetScaleWidth(50);
|
|
CGFloat itemHeight = kGetScaleWidth(50);
|
|
CGFloat itemSpace = kGetScaleWidth(9);
|
|
for (int i = 0; i < _number; i++) {
|
|
UILabel * label = [[UILabel alloc] init];
|
|
label.textColor = [DJDKMIMOMColor mainTextColor];
|
|
label.font = [UIFont fontWithName:@"PingFang-SC-Medium" size:18];
|
|
label.textAlignment = NSTextAlignmentCenter;
|
|
label.backgroundColor = UIColorFromRGB(0xF0F5F6);
|
|
label.layer.masksToBounds = YES;
|
|
label.layer.cornerRadius = kGetScaleWidth(4);
|
|
label.tag = 100 + i;
|
|
[self addSubview:label];
|
|
[label mas_makeConstraints:^(MASConstraintMaker *make) {
|
|
make.size.mas_equalTo(CGSizeMake(itemWidth, itemHeight));
|
|
make.centerY.mas_equalTo(self);
|
|
make.leading.mas_equalTo(self).offset((itemWidth + itemSpace)* i);
|
|
}];
|
|
[self.labelArray addObject:label];
|
|
}
|
|
}
|
|
|
|
- (void)normalStyle:(UILabel *)label {
|
|
label.backgroundColor = UIColorFromRGB(0xF0F5F6);
|
|
[label setCornerRadius:10
|
|
corners:kCALayerMinXMinYCorner | kCALayerMaxXMinYCorner | kCALayerMinXMaxYCorner | kCALayerMaxXMaxYCorner
|
|
borderWidth:1
|
|
borderColor:UIColorFromRGB(0xF0F5F6)];
|
|
}
|
|
|
|
- (void)lastInputStyle:(UILabel *)label {
|
|
label.backgroundColor = UIColorFromRGB(0xFFF6EB);
|
|
[label setCornerRadius:10
|
|
corners:kCALayerMinXMinYCorner | kCALayerMaxXMinYCorner | kCALayerMinXMaxYCorner | kCALayerMaxXMaxYCorner
|
|
borderWidth:1
|
|
borderColor:UIColorFromRGB(0xFF8C03)];
|
|
}
|
|
|
|
#pragma mark - Getters And Setters
|
|
- (void)setNumber:(int)number {
|
|
_number = number;
|
|
if(self.type == 1 && _number > 0){
|
|
[self configLabelArrayOfGiveDiamond];
|
|
return;
|
|
}
|
|
|
|
if (_number > 0) {
|
|
[self configLabelArray];
|
|
}
|
|
}
|
|
|
|
- (MSBaseTextField *)textField {
|
|
if (!_textField) {
|
|
_textField = [[MSBaseTextField alloc] init];
|
|
_textField.tintColor = [UIColor clearColor];
|
|
_textField.textColor = [UIColor clearColor];
|
|
_textField.keyboardType = UIKeyboardTypeNumberPad;
|
|
[_textField becomeFirstResponder];
|
|
}
|
|
return _textField;
|
|
}
|
|
|
|
- (NSMutableArray<UILabel *> *)labelArray {
|
|
if (!_labelArray) {
|
|
_labelArray = [NSMutableArray array];
|
|
}
|
|
return _labelArray;
|
|
}
|
|
|
|
@end
|