介绍
小编给大家分享一下iOS如何实现类似微信和支付宝的密码输入框,希望大家阅读完这篇文章之后都有所收获、下面让我们一起去探讨吧!
让你的自定义观点具备输入的功能(UIKeyInput协议)
通过UIKeyInput协议可以为响应者提供简单的键盘输入的功能,让需要键盘的应答器成为第一响应者就行了.UIKeyInput协议必须实现的有三个方法,分别是以下方法:
# pragma mark 作用;UIKeyInput/* * ,*用于显示的文本对象是否有任何文本 ,*/安康;(BOOL) hasText { return 才能;self.textStore.length 祝辞,0; } ,/* * ,*插入文本 ,*/安康;(空白)insertText:(NSString *) text { if 才能;(self.textStore.length & lt;, self.passWordNum), { ,,,//判断是否是数字 ,,,NSCharacterSet * cs =, [[NSCharacterSet characterSetWithCharactersInString: MONEYNUMBERS], invertedSet); ,,,NSString * filtered =, [[text componentsSeparatedByCharactersInSet: c], componentsJoinedByString: @"“); ,,,BOOL basicTest =, (text isEqualToString:过滤); ,,,如果(basicTest), { ,,,,if ([self.delegate respondstoselectorismemberofclass: @ selector (passWordDidChange:))), { ,,,,,,,(self.delegate passWordDidChange:自我); ,,,,,} ,,,,,if (self.textStore.length ==, self.passWordNum), { ,,,,,,,if ([self.delegate respondstoselectorismemberofclass: @ selector (passWordCompleteInput:))), { ,,,,,,,,,(self.delegate passWordCompleteInput:自我); ,,,,,,,} ,,,,,} ,,,,,(self.textStore appendString:文本); ,,,,,(self setNeedsDisplay); ,,,} ,,} } ,/* * ,*删除文本 ,*/安康;(空白)deleteBackward { if 才能;(self.textStore.length 祝辞,0),{ ,,,(self.textStore deleteCharactersInRange: NSMakeRange (self.textStore.length 背后,1,1)]; ,,if ([self.delegate respondstoselectorismemberofclass: @ selector (passWordDidChange:))), { ,,,,,(self.delegate passWordDidChange:自我); ,,,} ,,} (self setNeedsDisplay)才能; } ,/* * ,*是否能成为第一响应者 ,*/安康;(BOOL) canBecomeFirstResponder { return 才能;是的; } ,/* * ,*点击成为第一相应者 ,*/安康;(空白)touchesBegan:(NSSet通过CoreGraphics绘制出密码输入框
实现的思路是通过CoreGraphics框架绘制出密码输入框的外框和里面的小黑点,然后通过从键盘上获取到的字符串判断输入的位数,具体实现如下:
/* * ,*设置正方形的边长 ,*/安康;(空白)setSquareWidth:(CGFloat) squareWidth { 时间=_squareWidth 才能;squareWidth; (self setNeedsDisplay)才能; } ,/* * ,*设置键盘的类型 ,*/的背后,(UIKeyboardType) keyboardType { return 才能;UIKeyboardTypeNumberPad; } ,/* * ,*设置密码的位数 ,*/安康;(空白)setPassWordNum:(了NSUInteger) passWordNum { 时间=_passWordNum 才能;passWordNum; (self setNeedsDisplay)才能; } ,/* * ,*绘制 ,*/安康;(空白)绘制矩形(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才能(上下文,CGRectMake (, x,, y,, self.squareWidth * self.passWordNum, self.squareWidth)); CGContextSetLineWidth才能(上下文,1); CGContextSetStrokeColorWithColor才能(上下文,self.rectColor.CGColor); CGContextSetFillColorWithColor才能(上下文,[UIColor whiteColor] .CGColor);//画才能竖条 for 才能;(int 小姐:=,1;,小姐:& lt;=, self.passWordNum;,我+ +),{ ,,,CGContextMoveToPoint (x + i * self.squareWidth背景下,,,,y); ,,,CGContextAddLineToPoint (x + i * self.squareWidth背景下,,,,y + self.squareWidth); ,,,,CGContextClosePath(上下文); ,,} CGContextDrawPath才能(上下文,kCGPathFillStroke); CGContextSetFillColorWithColor才能(上下文,self.pointColor.CGColor);//画才能黑点 null null null null nulliOS如何实现类似微信和支付宝的密码输入框