##一.效果图:
实现思路:
1.输入显示试图和系统键盘的出现和隐藏。
2.用UILabel和UITextField实现输入框。
##二.关键代码:
//试图的出现和隐藏方法
- (void)showPayPopView
{
__weak typeof(self) weakSelf = self;
[UIView animateWithDuration:AnimationTimeInterval animations:^{
__strong typeof(weakSelf) strongSelf = weakSelf;
strongSelf.superView.backgroundColor = [UIColor colorWithWhite:0.3 alpha:0.3];
} completion:nil];
}
- (void)hidePayPopView
{
__weak typeof(self) weakSelf = self;
[UIView animateWithDuration:AnimationTimeInterval animations:^{
__strong typeof(weakSelf) strongSelf = weakSelf;
strongSelf.superView.alpha = 0.0;
strongSelf.frame = CGRectMake(strongSelf.frame.origin.x, kScreenWidth, strongSelf.frame.size.width, strongSelf.frame.size.height);
} completion:^(BOOL finished) {
__strong typeof(weakSelf) strongSelf = weakSelf;
[strongSelf.superView removeFromSuperview];
strongSelf.superView = nil;
}];
}
//输入密码或删除时
- (void)updateLabelBoxWithText:(NSString *)text
{
//输入时
if (text.length > self.currentText.length) {
for (int i = 0; i < PasswordBoxNumber; i++)
{
UILabel *label = self.labelBoxArray[i];
if (i < text.length - 1)
{
//特殊字符不居中显示,设置文本向下偏移
NSAttributedString * att1 = [[NSAttributedString alloc] initWithString:@"*" attributes:@{NSBaselineOffsetAttributeName:@(-3)}];
label.attributedText = att1;
}
else if (i == text.length - 1)
{
label.text = [text substringWithRange:NSMakeRange(i, 1)];
[self animationShowTextInLabel: label];
}
else
{
label.text = @"";
}
}
}
//删除时
else
{
for (int i = 0; i < PasswordBoxNumber; i++)
{
UILabel *label = self.labelBoxArray[i];
if (i < text.length)
{
//特殊字符不居中显示,设置文本向下偏移
NSAttributedString * att1 = [[NSAttributedString alloc] initWithString:@"*" attributes:@{NSBaselineOffsetAttributeName:@(-3)}];
label.attributedText = att1;
}
else
{
label.text = @"";
}
}
}
self.textField.text = text;
self.currentText = text;
}
//block回调拿到输入的密码字符
- (void)textDidChanged:(UITextField *)textField
{
if (textField.text.length > PasswordBoxNumber)
{
textField.text = [textField.text substringToIndex:PasswordBoxNumber];
}
[self updateLabelBoxWithText:textField.text];
if (textField.text.length == PasswordBoxNumber)
{
if (self.completionBlock)
{
self.completionBlock(self.textField.text);
}
}
}
demo下载地址:https://github.com/dt8888/PursePossword
##三.demo 的使用
1.初始化试图
self.payPopupView = [[PursePopupView alloc]initWithFrame:CGRectMake(0, XX_6(310), kScreenWidth, kScreenHeight)];
self.payPopupView.delegate = self;
[self.payPopupView showPayPopView];
2.实现代理方法拿到输入密码字符串
- (void)didPasswordInputFinished:(NSString *)password
{
if ([password isEqualToString:@"123456"])
{
NSLog(@"输入的密码正确");
}
else
{
NSLog(@"输入错误:%@",password);
[self.payPopupView didInputPayPasswordError];
}
}