自定义支付密码输入view、密码键盘并自动检测6位密码输入完全

综合技术 2017-12-31

代码很简单,利用textField自定义6位支付密码输入框,数字键盘利用button自定义,加两个协议方法,用来传值以及处理键盘响应事件。

1.png

customkeyboard.gif

这是项目中遇到的一个小功能,封装的不是很好,主讲自定义思路,如果你刚好也需要这种功能,建议将此 demo 作为参考,自己重新编写。

八月份换了工作地点,从武汉转到了南京。新的工作环境,新的同事,新的氛围,在团队中的职能担当也变了。之前是小公司职位更突出,现在是大公司,我成为了团队中的一个小成员。(这种变动,情绪上难免会有些波动)我是一个新人,工作时间也不是很长,技术积累的也没有那么多。唯一能帮我改变现状的只有我自己,我会静下心来好好成长。

值得高兴地是,我在武汉工作那段时间,利用工作间隙学习的js,swift,h5网页交互,现如今派上了用场。我很高兴能为团队中其他成员解决问题,这应该就是我的价值所在吧,我会继续努力的!

本文于2017.12.31下午再次编辑,更新优化,自动识别6位密码输入。

setPayPsd.gif

实现思路

既要记录文本的输入又要随着delete实时减少文本。如果仅仅只是实现

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 这个协议方法,是不能做到同时处理这两件事的。(既加又减,想想就矛盾)所以需要两个独立的方法去处理这两件事。

主要代码

1.处理输入逻辑:

/*!
 @method  密码输入时触发的协议方法
 @abstract 密码输入时触发的协议方法,遍历tf 进行赋值
 @discussion 注意点,delete事件也会进入这个方法 但string是nil 所以会给要赋值的tf 置为nil, 符合delete逻辑。
 @param textField textField
 @result bool
 */
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
    
    self.tipsLabel.text = @"请设置支付密码";
    for (UITextField *tf in self.tfArr) {
        if ([tf.text isEqualToString:@""]||tf.text == nil) {
            tf.text = string;
            if (textField.text.length==5) {
                [self textFieldShouldReturn:textField];
            }
            return YES;
        }
    }
    return YES;
}

2.处理删除逻辑:

/*!
 @method  payPasswordTFDeleteEvent
 @abstract 键盘delete触发的协议方法
 @discussion 自定义的协议方法,键盘delete触发的协议方法。
 
 */
- (void)payPasswordTFDeleteEvent{
    
    [self.tfArr enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        UITextField *tf = (UITextField *)obj;
        if (![tf.text isEqualToString:@""] && tf.text !=nil) {
            tf.text = @"";
            *stop = YES;
        }
    }];
}

协议方法是自定义 textField 实现 deleteBackward 协议方法,监控键盘delete的点击。

注意:

如果项目中使用了 IQKeyboardManager 请实现下面的方法,避免使用过程中出现问题:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
    [self.tfArr enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        UITextField *tf = (UITextField *)obj;
        tf.text = @"";
    }];
}

CustomSectetTFAndKeyBoard

转载请注明出处

您可能感兴趣的

iOS集成Fabric & Crashlytics (3) 上一篇我们了解了如何使用Crashlytics 进行数据统计,这一篇我们主要研究一下如何向Fabric上面上传并查阅自定义的Log. 其实自定义log很简单. 但是OC 和Swift 是稍微有些区别的. OC: CLSLogv("Log awesomeness %d %d %@", ...
Apollo – The GraphQL client that makes API integra... Integrating apps and servers is not an easy task, we all know that. Even with great tools like Alamofire and Retrofit there are still a lot of things ...
iOS逆向必备绝技之ipa重签名 2018开篇,这回要讲的是iOS重签名,网上重签名的工具太多了,我试用了一下,都还挺好使。但是,你不知道,我是个喜欢装逼的人吗?用工具怎么够酷呢?对,装逼得用终端。接下来的操作都是在终端中进行,开始你的装逼之旅吧! 一、重签名准备工作: 找到开发者证书和配置文件: 列出...
Adding a Display to the Teenager Notification Serv... Overview A couple of weeks back I wrote this post that detailed Building a Teenager Notification Service using Azure IoT an Azure Function, Microso...
iOS 数组~画饼图-添加数据优化 //联系人:石虎QQ:1224614774昵称:嗡嘛呢叭咪哄 一、概念- (void)viewDidLoad { ; //初始化 SHPieChart *chart = initWithFrame:CGRectMake(0,40...