iOS 支付密文实现方案

来源:互联网 发布:域名dns劫持检测 编辑:程序博客网 时间:2024/04/29 18:07

#import <UIKit/UIKit.h>

@class WCLPassWordView;


@protocol  WCLPassWordViewDelegate<NSObject>


@optional

/**

 *  监听输入的改变

 */

- (void)passWordDidChange:(WCLPassWordView *)passWord;


/**

 *  监听输入的完成时

 */

- (void)passWordCompleteInput:(WCLPassWordView *)passWord;


/**

 *  监听开始输入

 */

- (void)passWordBeginInput:(WCLPassWordView *)passWord;



@end


IB_DESIGNABLE


@interface WCLPassWordView : UIView<UIKeyInput>


@property (assign,nonatomic) IBInspectableNSUInteger passWordNum;//密码的位数

@property (assign,nonatomic) IBInspectableCGFloat squareWidth;//正方形的大小

@property (assign,nonatomic) IBInspectableCGFloat pointRadius;//黑点的半径

@property (strong,nonatomic) IBInspectableUIColor *pointColor;//黑点的颜色

@property (strong,nonatomic) IBInspectableUIColor *rectColor;//边框的颜色

@property (weak, nonatomic) IBOutletid<WCLPassWordViewDelegate> delegate;

@property (strong,nonatomic, readonly)NSMutableString *textStore;//保存密码的字符串





import "WCLPassWordView.h"


@interface WCLPassWordView ()


@property (strong,nonatomic) NSMutableString *textStore;//保存密码的字符串


@end


@implementation WCLPassWordView


static NSString  *const MONEYNUMBERS = @"0123456789";


- (instancetype)initWithCoder:(NSCoder *)coder {

    self = [superinitWithCoder:coder];

    if (self) {

        self.textStore = [NSMutableStringstring];

        self.squareWidth =45;

        self.passWordNum =6;

        self.pointRadius =6;

        self.rectColor = [UIColorcolorWithRed:51.0/255.0green:51.0/255.0blue:51.0/255.0alpha:1.0];

        self.pointColor = [UIColorcolorWithRed:223.0/255.0green:223.0/255.0blue:223.0/255.0alpha:1.0];

        [selfbecomeFirstResponder];

    }

    return self;

}


/**

 *  设置正方形的边长

 */

- (void)setSquareWidth:(CGFloat)squareWidth {

    _squareWidth = squareWidth;

    [selfsetNeedsDisplay];

}


/**

 *  设置键盘的类型

 */

- (UIKeyboardType)keyboardType {

    returnUIKeyboardTypeNumberPad;

}


/**

 *  设置密码的位数

 */

- (void)setPassWordNum:(NSUInteger)passWordNum {

    _passWordNum = passWordNum;

    [selfsetNeedsDisplay];

}


- (BOOL)becomeFirstResponder {

    if ([self.delegaterespondsToSelector:@selector(passWordBeginInput:)]) {

        [self.delegatepassWordBeginInput:self];

    }

    return [superbecomeFirstResponder];

}


/**

 *  是否能成为第一响应者

 */

- (BOOL)canBecomeFirstResponder {

    return YES;

}


- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {

    if (![selfisFirstResponder]) {

        [selfbecomeFirstResponder];

    }

}


#pragma mark - UIKeyInput

/**

 *  用于显示的文本对象是否有任何文本

 */

- (BOOL)hasText {

    return self.textStore.length >0;

}


/**

 *  插入文本

 */

- (void)insertText:(NSString *)text {

    if (self.textStore.length < self.passWordNum) {

        //判断是否是数字

        NSCharacterSet *cs = [[NSCharacterSetcharacterSetWithCharactersInString:MONEYNUMBERS]invertedSet];

        NSString*filtered = [[textcomponentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""];

        BOOL basicTest = [text isEqualToString:filtered];

        if(basicTest) {

            [self.textStoreappendString:text];

            if ([self.delegaterespondsToSelector:@selector(passWordDidChange:)]) {

                [self.delegatepassWordDidChange:self];

            }

            if (self.textStore.length ==self.passWordNum) {

                if ([self.delegaterespondsToSelector:@selector(passWordCompleteInput:)]) {

                    [self.delegatepassWordCompleteInput:self];

                }

            }

            [self setNeedsDisplay];

        }

    }

}


/**

 *  删除文本

 */

- (void)deleteBackward {

    if (self.textStore.length >0) {

        [self.textStoredeleteCharactersInRange:NSMakeRange(self.textStore.length - 1, 1)];

        if ([self.delegaterespondsToSelector:@selector(passWordDidChange:)]) {

            [self.delegatepassWordDidChange:self];

        }

    }

    [selfsetNeedsDisplay];

}


// Only override drawRect: if you perform custom drawing.

- (void)drawRect:(CGRect)rect {

    CGFloat height = rect.size.height;

    CGFloat width = rect.size.width;

    CGFloat x = (width - self.squareWidth*self.passWordNum)/2.0;

    CGFloat y = (height - self.squareWidth)/2.0;

    CGContextRef context =UIGraphicsGetCurrentContext();

    //画外框

    CGContextAddRect(context,CGRectMake( x, y,self.squareWidth*self.passWordNum,self.squareWidth));

    CGContextSetLineWidth(context,1);

    CGContextSetStrokeColorWithColor(context,self.rectColor.CGColor);

    CGContextSetFillColorWithColor(context, [UIColorwhiteColor].CGColor);

    //画竖条

    for (int i =1; i <= self.passWordNum; i++) {

        CGContextMoveToPoint(context, x+i*self.squareWidth, y);

        CGContextAddLineToPoint(context, x+i*self.squareWidth, y+self.squareWidth);

         CGContextClosePath(context);

    }

    CGContextDrawPath(context,kCGPathFillStroke);

    CGContextSetFillColorWithColor(context,self.pointColor.CGColor);

    //画黑点

    for (int i =1; i <= self.textStore.length; i++) {

        CGContextAddArc(context,  x+i*self.squareWidth -self.squareWidth/2.0, y+self.squareWidth/2,self.pointRadius,0, M_PI*2,YES);

        CGContextDrawPath(context,kCGPathFill);

    }

}



0 0