说一下密码加密的实现方式
 
效果图:
 
 
 
 
 
实现方式:
 
主要说一下密码框的实现,这个密码框中间的四个数字其实是4个 UITextField ,然后通过键盘删除键 和TextFiled 的协议shouldChangeCharactersInRange.来判断输入的位置,代码如下;
 
 
 
直接上代码:
 
//
//  IDSGameRoomSecretView.h
//
//  Created by levi.duan on 2017/7/18.
//  Copyright © 2017年 Near. All rights reserved.
//

#import <UIKit/UIKit.h>
#import "BaseViewController.h"

typedefvoid(^handleInputPasswordBlock)(NSString *password);

@interface IDSGameRoomSecretView : UIView

- (instancetype)initWithPasswordCallBack:(handleInputPasswordBlock)passwordCallback;

/**
 弹出说明视图
 */
- (void)showInputSecretView;

@end

 
 
 
 
 
 
//
//  IDSGameRoomSecretView.m
//  Near
//
//  Created by levi.duan on 2017/7/18.
//  Copyright © 2017年 Near. All rights reserved.
//

#import "IDSGameRoomSecretView.h"
#import "PZXVerificationTextField.h"

@interfaceIDSGameRoomSecretView()<UIGestureRecognizerDelegate,UITextFieldDelegate,PZXTextFieldDelegate>

@property (nonatomic,strong) UILabel *titleLabel;
@property (nonatomic,strong) UILabel *subtitleLabel;
@property (nonatomic,strong) UITextField *secretTextField;
@property (nonatomic,strong) UIButton *gameRoomBtn;
@property (nonatomic, strong) UIView *secretRoomView;
@property (nonatomic, strong) NSMutableArray *textFieldArray;
@property (nonatomic , copy) handleInputPasswordBlock onHandlePasswordCallBack;

@end

@implementation IDSGameRoomSecretView

- (instancetype)initWithPasswordCallBack:(handleInputPasswordBlock)passwordCallback
{
    if (self = [superinit]) {
        self.onHandlePasswordCallBack = passwordCallback;
    }
   
    returnself;
}

- (void)showInputSecretView
{

    self.backgroundColor = [UIColorcolorWithRed:0green:0blue:0alpha:0.7];

    [[AppDelegatemainWindow] addSubview:self];
    [self.inputViewbecomeFirstResponder];
   
    self.frame = CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
   
    UITapGestureRecognizer *selfRecognizer = [[UITapGestureRecognizeralloc] initWithTarget:selfaction:@selector(removeView)];
    self.userInteractionEnabled = YES;
    [selfaddGestureRecognizer:selfRecognizer];
    selfRecognizer.delegate = self;
   
    self.secretRoomView = [[UIViewalloc] initWithFrame:CGRectMake(0, 0, 510/2, 380/2)];
    self.secretRoomView.centerY = SCREEN_HEIGHT/2;
    self.secretRoomView.centerX = SCREEN_WIDTH/2;
    self.secretRoomView.backgroundColor = [UIColorwhiteColor];
   
    self.secretRoomView.centerY = SCREEN_HEIGHT/2-50;
 
   

    _titleLabel = [[UILabelalloc] initWithFrame:CGRectMake(0, 50/2, 0, 0)];
    _titleLabel.text = @"房间已加锁";
    _titleLabel.textColor = NF_Color_C3;
    _titleLabel.font = [UIFontsystemFontOfSize:Near_Final_Font_T6];
    [_titleLabelsizeToFit];
    _titleLabel.centerX = self.secretRoomView.frame.size.width/2;
    [self.secretRoomViewaddSubview:_titleLabel];
   
    _subtitleLabel = [[UILabelalloc] initWithFrame:CGRectMake(0,CGRectGetMaxY(self.titleLabel.frame)+10, 0, 0)];
    _subtitleLabel.text = @"输入房间密码";
    _subtitleLabel.textColor = NF_Color_C10;
    _subtitleLabel.font = [UIFontsystemFontOfSize:Near_Final_Font_T9];
    [_subtitleLabelsizeToFit];
    _subtitleLabel.centerX = self.secretRoomView.frame.size.width/2;
    [self.secretRoomViewaddSubview:_subtitleLabel];
   
    self.textFieldArray = [NSMutableArrayarray];
    NSArray *views = [selfsubviews];
    for (UITextField *tf in views) {
        [tf removeFromSuperview];
    }
   
    for (int i=0;i<4;++i) {
        PZXVerificationTextField *tf = [[PZXVerificationTextFieldalloc] initWithFrame:CGRectMake(70/2+i*70/2+15*i, CGRectGetMaxY(self.subtitleLabel.frame)+15, 70/2, 70/2)];
        [tf setFont:[UIFontsystemFontOfSize:Near_Final_Font_T5]];
        [tf setTextColor:NF_Color_C4];
        tf.backgroundColor = [UIColorclearColor];
        tf.layer.borderWidth = 0.5;
        tf.layer.borderColor = NF_Color_C9.CGColor;
        tf.layer.cornerRadius = 5.f;
        tf.layer.masksToBounds = YES;
        tf.tintColor =[UIColorclearColor];
        tf.tag = 100+i;
        tf.keyboardType = UIKeyboardTypeNumberPad;
        tf.textAlignment = NSTextAlignmentCenter;
        tf.delegate = self;
        tf.pzx_delegate = self;
        [self.secretRoomViewaddSubview:tf];
        [self.textFieldArraycl_addObject:tf];
        [tf becomeFirstResponder];
    }
   
    self.gameRoomBtn = [[UIButtonalloc] initWithFrame:CGRectMake(0, 270/2, 228/2, 68/2)];
    self.gameRoomBtn.centerX = self.secretRoomView.frame.size.width/2;
   
    [self.gameRoomBtnsetTitle:@"确定"forState:UIControlStateNormal];
    [self.gameRoomBtn.titleLabelsetFont:[UIFontsystemFontOfSize:Near_Final_Font_T5]];
    [self.gameRoomBtn.titleLabelsetTextColor:NF_Color_C1];
    self.gameRoomBtn.backgroundColor = NF_Color_C27;
    [self.gameRoomBtnaddTarget:selfaction:@selector(interRoomVoid) forControlEvents:UIControlEventTouchUpInside];
    self.gameRoomBtn.layer.cornerRadius = 5.0f;
    self.gameRoomBtn.layer.masksToBounds = YES;
   
    [self.secretRoomViewaddSubview:self.gameRoomBtn];
   
    [selfaddSubview:self.secretRoomView];
   
    self.secretRoomView.layer.cornerRadius = 10.f;
    self.secretRoomView.layer.masksToBounds = YES;
   
   
}

#pragma mark - Public Methods

/*
- (void)showDalog
{
    [[AppDelegate mainWindow] addSubview:self];
    [self.inputView becomeFirstResponder];
}
 */

- (void)removeView
{
    [selfremoveFromSuperview];
}

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
   
    textField.text = string;
   
    if (textField.text.length > 0) {//防止退格第一个的时候往后跳一格
       
        if (textField.tag<  [[_textFieldArraylastObject] tag]) {
           
            UITextField *newTF =  (UITextField *)[selfviewWithTag:textField.tag+1];
           
            [newTF becomeFirstResponder];
        }
    }
    returnNO;
}

//点击退格键的代理
#pragma mark - PZXTextFieldDelegate
-(void)PZXTextFieldDeleteBackward:(PZXVerificationTextField *)textField{
   
    if (textField.tag > [[_textFieldArrayfirstObject] tag]) {
       
        UITextField *newTF =  (UITextField *)[selfviewWithTag:textField.tag-1];
        newTF.text = @"";
        [newTF becomeFirstResponder];
    }
   
   
}

- (void)interRoomVoid
{
    [selfgetVertificationCode];
}

-(void)getVertificationCode{ //获取验证码方法
   
    NSString *str = [NSStringstring];
   
    for (int i = 0; i<_textFieldArray.count; i++) {
        str = [str stringByAppendingString:[NSStringstringWithFormat:@"%@",(UITextField *)[_textFieldArray[i] text]]];
    }
    if (self.onHandlePasswordCallBack) {
        self.onHandlePasswordCallBack(str);
    }
    [selfremoveView];
}

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
   
    for (UITextField *tf inself.textFieldArray) {
       
        [tf resignFirstResponder];
    }
}

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
    if ([touch.viewisDescendantOfView:self.secretRoomView]) {
        returnNO;
    }
    returnYES;
}

@end

 
//
//  PZXVerificationTextField.h
//  Near
//
//  Created by levi.duan on 2017/7/19.
//  Copyright © 2017年 Near. All rights reserved.
//

#import <UIKit/UIKit.h>

@classPZXVerificationTextField;//要class一下不然代理里面无法识别

@protocol PZXTextFieldDelegate <NSObject>

- (void)PZXTextFieldDeleteBackward:(PZXVerificationTextField *)textField;

@end

@interface PZXVerificationTextField : UITextField

@property (nonatomic, assign)id<PZXTextFieldDelegate> pzx_delegate;

@end

 
 
 
//
//  PZXVerificationTextField.m
//  Near
//
//  Created by levi.duan on 2017/7/19.
//  Copyright © 2017年 Near. All rights reserved.
//

#import "PZXVerificationTextField.h"

@implementation PZXVerificationTextField

-(void)deleteBackward{
    [superdeleteBackward];
    if ([self.pzx_delegaterespondsToSelector:@selector(PZXTextFieldDeleteBackward:)]) {
       
        [self.pzx_delegatePZXTextFieldDeleteBackward:self];
    }
   
   
}

@end

 

iOS密码框的实现方式的更多相关文章

  1. iOS密码框实现(二)取消确定按钮

    由于将确定按钮去掉了,所以需要重新修改下代码,当输入第四个数字时,自动进入房间.   iOS 密码框效果图:     实现方式:   首先声明一个block初始化方法,因为这只是个框框,并不需要处理网 ...

  2. 表单form的属性,单行文本框、密码框、单选多选按钮

    基础表单结构: <body> <h1> <hr /> <form action="" name="myFrom" en ...

  3. iOS弹框

    IOS 弹框 如果直接弹出一个自定义的视图 可以选用第三方: MJPopup 弹出: if(!bandview) { bandview=[[[NSBundle mainBundle]loadNibNa ...

  4. WPF文本框密码框添加水印效果

    WPF文本框密码框添加水印效果 来源: 阅读:559 时间:2014-12-31 分享: 0 按照惯例,先看下效果 文本框水印 文本框水印相对简单,不需要重写模板,仅仅需要一个VisualBrush ...

  5. [Asp.net]说说密码框和只读框

    作者:Wolfy出处:http://www.cnblogs.com/wolf-sun/ 引言 最近负责了一个公司的小项目,从前台到后代,都是自己搞的,为一个客户弄一个信息管理的小系统,虽然对界面什么的 ...

  6. Qt之密码框不可选中、复制、粘贴、无右键菜单等

    简述 在做用户登录.修改密码的时候,往往会用到密码框,其中一些功能要求与普通的输入框不同,例如:不能选中.复制.粘贴.无右键菜单等功能,当然设置密码不可见是必须的! 下面介绍两种方式来实现相同的效果. ...

  7. WPF 之 文本框及密码框添加水印效果

    1.文本框添加水印效果 文本框水印相对简单,不需要重写模板,仅仅需要一个 VisualBrush 和触发器验证一下Text是否为空即可. <TextBox Name="txtSerac ...

  8. 【Qt】Qt之密码框不可选中、复制、粘贴、无右键菜单等【转】

    简述 在做用户登录.修改密码的时候,往往会用到密码框,其中一些功能要求与普通的输入框不同,例如:不能选中.复制.粘贴.无右键菜单等功能,当然设置密码不可见是必须的! 下面介绍两种方式来实现相同的效果. ...

  9. Ios 弹框 MJPopup,KxMenu

    IOS 弹框 如果直接弹出一个自定义的视图 可以选用第三方: MJPopup 弹出: if(!bandview) { bandview=[[[NSBundle mainBundle]loadNibNa ...

随机推荐

  1. TDM-GCC是从mingw-w64项目patch而来,全部使用静态链接,对线程不需要额外的DLL,默认使用SJLJ异常(真是好东西)

    Windows版GCC之TDM-GCC 4.5.2 平时写 C/C++ 小程序的时候,不喜欢开VS,太庞大了,还要建项目.对于小程序,一个可以进行单文件编译的 IDE 是我的首选,我用的是 C-Fre ...

  2. HDU 2842 Chinese Rings(矩阵高速功率+递归)

    职务地址:HDU 2842 这个游戏是一个九连环的游戏. 如果当前要卸下前n个环.由于要满足前n-2个都卸下,所以要先把前n-2个卸下.须要f(n-2)次.然后把第n个卸下须要1次,然后这时候要卸下第 ...

  3. centos 7 构造iptables开放80port

    centos7默认是使用firewalld托管防火墙. 安装后centos7后,已安装nginxserver,但同样没有在一个局域网访问,我哥哥告诉我,我应该是一个防火墙以打开.防火墙关闭就可以了. ...

  4. 有关C++中String的一些知识

    在C++中,String 是一个类,相当于其他简单的类一样,它之中也包含很多简单的处理字符串的函数. 具体见 已下载好的String 类的基本操作 PDF.(大学那点事)

  5. Method for browsing internet of things and apparatus using the same

    A method for browsing Internet of things (IoT) and an apparatus using the same are provided. In the ...

  6. React HOC

    在React官网文档学习React HOC,整个看了一遍还是云里雾里的,于是按照官网文档,自己动手实践一下.官网地址:React 高阶组件 定义:高阶组件就是一个函数,且该函数接受一个组件作为参数,并 ...

  7. tornado+ansible+twisted+mongodb操作和维护系统开发自己主动(一个)

    前段时间去了解ansible配置管理(http://blog.csdn.net/column/details/ansible.html   anisble配置工具盒翻译),我感觉很强烈,认为短期内to ...

  8. Android开源项目SlidingMenu本学习笔记(两)

    我们已经出台SlidingMenu使用:Android开源项目SlidingMenu本学习笔记(一个),接下来再深入学习下.依据滑出项的Menu切换到相应的页面 文件夹结构: watermark/2/ ...

  9. LeetCode 36 Sudoku Solver

    Write a program to solve a Sudoku puzzle by filling the empty cells. Empty cells are indicated by th ...

  10. Qt 创建圆角、无边框、有阴影、可拖动的窗口 good

    程序窗口的边框,标题栏等是系统管理的,Qt 不能对其进行定制,为了实现定制的边框.标题栏.关闭按钮等,需要把系统默认的边框.标题栏去掉,然后使用 Widget 来模拟它们.这里介绍使用 QSS + Q ...