Files
peko-ios/YuMi/Modules/YMLogin/View/CustomView/LoginVerifCodeView.m
2025-01-07 20:07:54 +08:00

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