iOS开发进阶 - 实现类似微信和支付宝的密码输入框(UIKeyInput协议)

iOS小技能: 密码输入框右侧的明文显示按钮处理(enabled属性会影响按钮的selected状态失效,推荐使用userInteractionEnabled属性) 引言 应用场景:登录界面、密码修改界面 效果: I 实现显示隐藏按钮 声明显示隐藏按钮 @property (weak, nonatomic) UIButton *subscriptBtn4old; @property (weak, nonatomic) UIView *oldLine; 初始化显示隐藏按钮 - (UIButton *)subscriptBtn4old{ if (!_subscriptBtn4old) { UIButton *tmp = [[UIButton 阅读详情

如果移动端访问不佳,请访问我的个人博客

目前在项目中需要实现发红包的功能,自己就写了一个密码输入框的控件,主要用到了UIKeyInput协议和CoreGraphics框架,效果类似微信支付,感觉还行就把我的思路和制作过程写下来给大家分享一下。(demo地址觉得有用的可以star一下)

wcl.gif

让你的自定义View具备输入的功能(UIKeyInput协议)

通过UIKeyInput协议可以为响应者提供简单的键盘输入的功能,让需要键盘的responder成为第一响应者就行了。UIKeyInput协议必须实现的有三个方法,分别是以下方法:

#pragma mark - UIKeyInput
/**
 *  用于显示的文本对象是否有任何文本
 */
- (BOOL)hasText {
    return self.textStore.length > 0;
}

/**
 *  插入文本
 */
- (void)insertText:(NSString *)text {
    if (self.textStore.length < self.passWordNum) {
        //判断是否是数字
        NSCharacterSet *cs = [[NSCharacterSet characterSetWithCharactersInString:MONEYNUMBERS] invertedSet];
        NSString*filtered = [[text componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""];
        BOOL basicTest = [text isEqualToString:filtered];
        if(basicTest) {
          if ([self.delegate respondsToSelector:@selector(passWordDidChange:)]) {
                [self.delegate passWordDidChange:self];
            }
            if (self.textStore.length == self.passWordNum) {
                if ([self.delegate respondsToSelector:@selector(passWordCompleteInput:)]) {
                    [self.delegate passWordCompleteInput:self];
                }
            }
            [self.textStore appendString:text];
            [self setNeedsDisplay];
        }
    }
}

/**
 *  删除文本
 */
- (void)deleteBackward {
    if (self.textStore.length > 0) {
        [self.textStore deleteCharactersInRange:NSMakeRange(self.textStore.length - 1, 1)];
      if ([self.delegate respondsToSelector:@selector(passWordDidChange:)]) {
            [self.delegate passWordDidChange:self];
        }
    }
    [self setNeedsDisplay];
}

/**
 *  是否能成为第一响应者
 */
- (BOOL)canBecomeFirstResponder {
    return YES;
}

/**
 *  点击成为第一相应者
 */
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
    if (![self isFirstResponder]) {
        [self becomeFirstResponder];
    }
}

通过CoreGraphics绘制出密码输入框

实现的思路是通过CoreGraphics框架绘制出密码输入框的外框和里面的小黑点,然后通过从键盘上获取到的字符串判断输入的位数,具体实现如下:

/**
 *  设置正方形的边长
 */
- (void)setSquareWidth:(CGFloat)squareWidth {
    _squareWidth = squareWidth;
    [self setNeedsDisplay];
}

/**
 *  设置键盘的类型
 */
- (UIKeyboardType)keyboardType {
    return UIKeyboardTypeNumberPad;
}

/**
 *  设置密码的位数
 */
- (void)setPassWordNum:(NSUInteger)passWordNum {
    _passWordNum = passWordNum;
    [self setNeedsDisplay];
}

/**
 *  绘制
 */
- (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, [UIColor whiteColor].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);
    }
}

以上就是实现的主要代码和分析,大家需要看demo可以点击超链接进去下载观看,谢谢大家的阅读~

ios自定义密码输入框 立即下载

相关推荐

iOS自定义密码输入框

自定义微信和支付宝的弹出效果,以及输入密码和获取密码

iOS验证码及密码输入框的实现

1.输入框的实现分析 主要由可见的6个方格子组成,这里可以看成6个输入框或者显示标签。输入6个数字,组成密码或者验证码,可以创建6个textField拼接,也可以用6个label去显示,具体做法都可以,主要是实现的逻辑。 首先用户在来到输入页面的时候,键盘一般是弹起的,所以得有个textFiled作为焦点弹起键盘,接收输入事件,这里我选用的是用6个label去显......

辰远的博客 5072

ios 类似支付宝输入密码支付输入框控件

类似支付宝支付控件,输入4个数字,依次显示在4个控件,删除也是从后往前删除。

iOS--密码输入框(UITextField)

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34391854的博客 1113

jQuery仿微信密码输入框

插件描述:html5仿微信支付宝密码输入框. 参考示例:http://www.jq22.com/jquery-info5107

iOS验证码和密码输入框

自定义封装的一个iOS的验证码和密码的输入框,可以输入明文和密文两种方式,更新细节代码

自定义 iOS 密码框或验证码输入框,支持多位验证码,4位或6位验证码自己选择。

密码框 样式                           自定义输入验证码样式             git地址: https://github.com/HSFGitHub/CodeInputView.git 支持全部自定义 输入样式,背景图片样式,每位验证码背景图的间距。 1.使用方式:  //每位 验证码/密码 宽高CGFloat codeBgWH =

hsf_study的博客 6643

iOS实现类似微信和支付宝的密码输入框(UIKeyInput协议)

主要介绍了iOS实现类似微信和支付宝的密码输入框,通过UIKeyInput协议为响应者提供简单的键盘输入的功,再通过CoreGraphics绘制出密码输入框,感兴趣的小伙伴们可以参考一下

php支付密码控件,iOS开发类似支付宝密码输入框功能

这篇文章主要介绍了iOS实现类似微信和支付宝的密码输入框,通过UIKeyInput协议为响应者提供简单的键盘输入的功,再通过CoreGraphics绘制出密码输入框,感兴趣的小伙伴们可以参考一下目前在项目中需要实现发红包的功能,自己就写了一个密码输入框的控件,主要用到了UIKeyInput协议和CoreGraphics框架,效果类似微信支付,感觉还行就把我的思路和制作过程写下来给大家分享一下。让你...

weixin_39664998的博客 156

iOS使用UIKeyInput自定义密码输入框的方法示例

主要给大家介绍了关于iOS如何使用UIKeyInput自定义密码输入框的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

2019美亚杯团体赛刷题 部分题解(1-42、106-116)

文章目录写在前面使用工具刷题1.在黑客路由器里,有一台设备的MAC地址为00:11:6B:47:4D:55,请问它的IP地址是什么?2.在黑客路由器里,发现一设备的IP地址为192.168.0.103,请问该设备为如下哪一个:3.警方已经查证所有连接此router的设备都归黑客所有,根據黑客路由器的訊息,下列哪组(设备---ip)是错误的:4.Hacker现场检获的Windows主机硬盘已成功取证并制作成镜像Win1.E01,下列哪个是其硬盘证据文件的MD5哈希值。5.MD5hash算法会产生一个什么大小的

7ruth0hn的博客 7548

ios 输入框上下闪烁问题

原因: 问题出现在iOS在识别到有密码输入框时,会触发自动填充密码的功能,所以在输入账号/用户名时每次会重新拉起手机键盘,导致键盘反复闪烁。解决方法:密码框上面放置一个隐藏的input 阻断账号密码自动填充。图片就不自己做了 用别人的。

IT_iosers的博客 839

MPN – 制造商物料编号(延伸)

此外,用户还可以在物料主数据中定义阻止MPN材料的原因,以及在采购订单创建时,是否可以将现有的MPN材料修改为其他MPN材料,从而实现对MPN材料的精细控制和管理。通过使用AMPL,用户可以指定每个MPN材料是否仅能为特定工厂或整个企业所有工厂采购、采购的时间段、是否必须属于特定修订级别、是否只能从特定制造商工厂采购以及是否被阻止及其原因。通过AMPL管理,企业可以规范采购流程,避免使用未经批准的材料,从而提高采购的透明度和效率,同时也为质量控制提供了保障‌。3、QM中的制造商物料。质量信息记录QI01。

yanzibing99的博客 2487

推荐一款超强的iOS输入视图库——CRBoxInputView

CRBoxInputView是一款专为iOS开发设计的高度可定制化的输入视图组件,它不仅美观实用,还具有强大的灵活性。无论你是开发短信验证码输入、密码输入还是手机号输入界面,这款库都能满足你的需求。 ## 项目简介 CRBoxInputView是一个基于Swift编写的轻量级输入框控件,它可以轻松创建带有输入限制的文本输入视图,例如验证码或密码输入。它内置了多种样式和功能,包括自定义占位符、安全...

gitblog_00036的博客 696

双硬盘下Ubuntu 16.04与Win10双系统的安装

之前写过一个双系统安装过程,今天再次整理的原因是想重点强调双硬盘的区别。标红的一定要注意看,那就是我自己一步一步踏出来的坑啊...   基础步骤就不再重复,重点讲区别,需要看详细步骤的童鞋(或者你只有一个硬盘)请看我上一篇博客https://blog.youkuaiyun.com/weixin_40308540/article/details/80157444   区别:双硬盘和单硬盘的区别是什么呢?...

不吃包子 1124

macOS 发票查验全攻略:从证书导入到Safari调试

本文详细介绍了在macOS上进行发票查验的全流程,包括证书下载、钥匙串访问导入、Safari浏览器调试等关键步骤。重点解决了验证码不显示等常见问题,提供了证书信任设置和开发者工具使用的实用技巧,帮助用户顺利完成税务发票在线查验。

weixin_29204749的博客 546

iOS如何自定义一个类似UITextView的本文编辑View

iOS自定义文本输入view

yanhaiming56的博客 1641

Webots+UR机械臂仿真全流程:手把手教你用Python实现Pick-and-Place轨迹规划

本文详细介绍了使用Webots和Python实现UR六自由度机械臂的Pick-and-Place轨迹规划全流程。从环境搭建、运动学正逆解计算到轨迹规划实战技巧,涵盖工业场景中的关节补偿、末端校准等实际问题解决方案,帮助开发者快速掌握机械臂精准控制技术。

weixin_29083649的博客 284

iOS之自定义密码框

#import "UIKit/UIKit.h"@class LYSurePWVC;@protocol LYSurePWVCdelegate&lt;NSObject&gt;-(void)LYSurePWVC:(LYSurePWVC*)LYSurePWVC isPWCorrect:(NSString *)isPWCorrect;@end@interface LYSurePWVC : UIView@pr...

代码解释生活 1131

【GameFramework框架内置模块】2、数据节点(Data Node)

这一篇讲数据节点DataNode,基本开发程序都会有类似数据节点作用的东西,数据节点的作用其实就是保存游戏运行时的一些缓存数据,比如用户登录信息、用户名、任务节点等等。数据一般会有增删改查这四种操作,在运行时的数据一般是使用单例或者静态属性,将数据存储在内存中而数据节点也是将数据存储在内存中,但是不用序列化数据,比使用单例或者静态属性要容易维护的多,特别时它的树形结构可以让我们很好的组织我们的数据结构,方便做增删改查操作。数据节点DataNode模块的数据的存储方式是以树形结构存储。

优快云博客专家,Unity3D高级软件工程师,《Unity 3D从入门到实战》作者。 3185

建立时间与保持时间

建立时间与保持时间的计算 文章目录1、建立时间与保持时间概述及模型2、寄存器之间数据传输时建立时间与保持时间3、寄存器之间数据传输时建立时间余量与保持时间余量计算4、 FPGA允许的最大时钟频率或最小时钟周期5、计算FPGA时钟所允许的最大频率或最小时钟周期6、违反建立和保持时间会发生什么? 1、建立时间与保持时间概述及模型 建立时间(Tsu): 在时钟采样之前,输入必须稳定一段时间,该时间量称为建立时间。 理想最优建立时间: 保持时间(Th): 在时钟沿之后输入到触发器稳定所需的最短时间。 理想最优

Crazzy_M的博客 3万+

iOS仿支付宝/微信支付键盘输入demo

前段时间公司需要用到类似支付宝/微信支付的键盘输入界面,于是和同事写了一个,可能代码质量不是很高,但是也实现了功能,这里记录一下给广大 简书好友参考哈... 先给下demo的gitHub地址:(喜欢的话,star下吧) https://github.com/BrightMoment/D-Y/tree/master/仿微信:支付宝密码输入框/仿微信:支付宝密码输入框 1.先给大家看看截屏(简书

努力,可能成功!放弃,注定失败! 4333

车载ECU底软测试:方法与技术的深度解析

底软是运行在 ECU 硬件平台上的基础软件,它为上层应用程序提供了硬件驱动、操作系统服务、通信协议栈等功能。底软的主要功能包括:硬件驱动:负责与 ECU 的各种硬件外设进行通信和控制,如 GPIO、UART、SPI、CAN 等。操作系统服务:提供任务调度、内存管理、中断处理等功能,确保系统的实时性和稳定性。通信协议栈:实现 ECU 与其他 ECU 或外部设备之间的通信,如 CAN、LIN、FlexRay 等。诊断服务:负责对 ECU 的故障进行诊断和处理,并将故障信息存储在故障码存储器中。

天赐好车的博客 1429

iOS 交易支付密码(多种样式选择)~ 封装demo

 联系人:石虎 QQ:1224614774  昵称: 嗡嘛呢叭咪哄                       QQ群:807236138  群称: iOS 技术交流学习群   一、概念 在外界直接一行代码实现 ///MARK:- 实例化一个密码 显示view - (void)addPasswordTextView:(CGRect)frame { _passwordTextVi...

石虎 2286

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

仿微信支付密码输入框

两种不同实现,使用系统键盘和使用自定义键盘1.简单功能,可结合自定义键盘使用,未处理系统键盘输入 布局<?xml version="1.0" encoding="utf-8"?> <merge xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical"

yuanjw2014的专栏 1249

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

iOS仿微信支付弹出框

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34235105的博客 457

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

上一篇: iOS开发进阶 - 用AVFoundation自定义视频录制功能
下一篇: This version does not support documents saved in the Xcode 8 format. Open this document with Xcode 8
W_C__L
W_C__L 领域专家: 移动开发技术领域 领域专家: 移动开发技术领域
博客等级 码龄14年 194粉丝 68原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值