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);
}
}
- iOS 支付密文实现方案
- iOS-支付宝支付的实现
- 关于支付成功,实现页面跳转方案
- iOS: 实现微信支付
- iOS ping++支付功能实现
- iOS支付功能篇:原生WebView调起支付宝客户端支付方案
- iOS 下单选列表实现方案
- iOS中多线程实现方案
- iOS简单动画实现方案
- iOS微信支付流程及实现
- 支付宝移动支付方案
- iOS 支付宝支付
- ios 支付宝支付
- iOS 支付宝支付
- IOS支付宝支付
- iOS 支付宝支付
- 支付宝支付iOS
- iOS 支付宝支付
- 12c trancate table cascade
- PAFA 框架报错java.io.FileNotFoundException: class path resource [log4j.properties] cannot be resolved to
- maven 分模块开发
- 使用shell实现对xml文件的指定字段进行修改,默认替换成当时的时间戳
- netfilter/iptables全攻略
- iOS 支付密文实现方案
- Windows环境下svn服务器的安装步骤
- unix之内存管理
- LeetCode—357. Count Numbers with Unique Digits
- PyAutoIt 0.3库安装和使用
- 剑指offer|替换空格
- 测试
- spring集成quartz实现的定时更新cache的代码配置
- Canvas(画布)类的使用