iOS密码框的实现方式

// 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密码框的实现方式的更多相关文章
- iOS密码框实现(二)取消确定按钮
		由于将确定按钮去掉了,所以需要重新修改下代码,当输入第四个数字时,自动进入房间. iOS 密码框效果图: 实现方式: 首先声明一个block初始化方法,因为这只是个框框,并不需要处理网 ... 
- 表单form的属性,单行文本框、密码框、单选多选按钮
		基础表单结构: <body> <h1> <hr /> <form action="" name="myFrom" en ... 
- iOS弹框
		IOS 弹框 如果直接弹出一个自定义的视图 可以选用第三方: MJPopup 弹出: if(!bandview) { bandview=[[[NSBundle mainBundle]loadNibNa ... 
- WPF文本框密码框添加水印效果
		WPF文本框密码框添加水印效果 来源: 阅读:559 时间:2014-12-31 分享: 0 按照惯例,先看下效果 文本框水印 文本框水印相对简单,不需要重写模板,仅仅需要一个VisualBrush ... 
- [Asp.net]说说密码框和只读框
		作者:Wolfy出处:http://www.cnblogs.com/wolf-sun/ 引言 最近负责了一个公司的小项目,从前台到后代,都是自己搞的,为一个客户弄一个信息管理的小系统,虽然对界面什么的 ... 
- Qt之密码框不可选中、复制、粘贴、无右键菜单等
		简述 在做用户登录.修改密码的时候,往往会用到密码框,其中一些功能要求与普通的输入框不同,例如:不能选中.复制.粘贴.无右键菜单等功能,当然设置密码不可见是必须的! 下面介绍两种方式来实现相同的效果. ... 
- WPF 之 文本框及密码框添加水印效果
		1.文本框添加水印效果 文本框水印相对简单,不需要重写模板,仅仅需要一个 VisualBrush 和触发器验证一下Text是否为空即可. <TextBox Name="txtSerac ... 
- 【Qt】Qt之密码框不可选中、复制、粘贴、无右键菜单等【转】
		简述 在做用户登录.修改密码的时候,往往会用到密码框,其中一些功能要求与普通的输入框不同,例如:不能选中.复制.粘贴.无右键菜单等功能,当然设置密码不可见是必须的! 下面介绍两种方式来实现相同的效果. ... 
- Ios 弹框 MJPopup,KxMenu
		IOS 弹框 如果直接弹出一个自定义的视图 可以选用第三方: MJPopup 弹出: if(!bandview) { bandview=[[[NSBundle mainBundle]loadNibNa ... 
随机推荐
- 用决策树模型求解回归问题(regression tree)
			How do decision trees for regression work? 决策树模型既可以求解分类问题(对应的就是 classification tree),也即对应的目标值是类别型数据, ... 
- 利用WPF建立自己的3d gis软件(非axhost方式)(三)矢量数据显示控制
			原文:利用WPF建立自己的3d gis软件(非axhost方式)(三)矢量数据显示控制 先下载SDK:https://pan.baidu.com/s/1M9kBS6ouUwLfrt0zV0bPew 密 ... 
- markdownpad 2 的使用
			1. 注册 邮箱:Soar360@live.com 授权秘钥: GBPduHjWfJU1mZqcPM3BikjYKF6xKhlKIys3i1MU2eJHqWGImDHzWdD6xhMNLGVpbP2M ... 
- Win7 64有点找不到MSVCP71.DLL和MSVCR71.dll
			 现象: win7启动好多程序都报找不到MSVCP71.DLL,网页上不去,可是非常奇怪的是好像在线给系统打补丁没有受到不论什么影响,能正常打补丁. 解决: 从本机搜索了一下msvcp71.dll ... 
- C++使用Windows API CreateMutex函数多线程编程
			C++中也可以使用Windows 系统中对应的API函数进行多线程编程.使用CreateThread函数创建线程,并且可以通过CreateMutex创建一个互斥量实现线程间数据的同步: #includ ... 
- delphi的bpl、dcp 、dcu文件意义(BPL相当于C++中的DLL,DCP相当于C++中的Lib,编译时需要)
			BPL 英文全称 Borland Package library ,是一种特殊的DLL文件,用于代码重用和减少可执行文件.编译bpl时,仅需要添加相应功能的pas文件,如果有窗体,则需要添加dfm文 ... 
- Codeforces Round #248 (Div. 2) B称号 【数据结构:树状数组】
			主题链接:http://codeforces.com/contest/433/problem/B 题目大意:给n(1 ≤ n ≤ 105)个数据(1 ≤ vi ≤ 109),当中有m(1 ≤ m ≤ ... 
- 机器学习实战 Tricks
			样本集的简单封装 D = (numpy.random.randn(N, d), numpy.random.randint(low=0, high=2, size=(N, ))) # D[0] ⇒ X ... 
- 怎样从一名程序员过度到项目经理(整理自csdn论坛) 选择自 whoopee 的 Blog
			1.从程序员到PM,是一条脱变的路,事实上程序员走的路最终不应该是项目经理.首先有一点需要明白的就是,一定规模的项目中,项目经理不需要太懂技术,他可以是一知半解.项目经理的任务不是在技术方面,技术相关 ... 
- springboot 集成单元测试
			官网参考地址 1. 添加依赖 <!-- 测试 --> <dependency> <groupId>org.springframework.boot</grou ... 
