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 ...
随机推荐
- 【codeforces 534C】Polycarpus' Dice
[题目链接]:http://codeforces.com/contest/534/problem/C [题意] 给你n个奇怪的骰子,第i个骰子有di个面; 然后给你n个骰子的点数之和; 问你每一个骰子 ...
- Mapreduce 订单分组案例
程序执行流程如下: map()-->getPartition()分区--->write()(序列化,每一行都顺序执行这三个方法)--->readFields()---->com ...
- 设置aspx页面的地址栏中的Session ID的显示与隐藏
设置aspx页面的地址栏中的Session ID的显示与隐藏修改web.config文件中的sessionState节点下的cookieless的值 1.cookieless的值是false的时候隐藏 ...
- CUDA—使用GPU暴力破解密码
GPU支持大规模的并行加速运算,胜在量上,CPU处理大量的并行运算显得力不从心,它是胜在逻辑上.利用显卡加速的应用越来越多,但如果说GPU即将或最终将替代CPU还有点言过其实,二者最终将优势互补,各尽 ...
- 高科技 stuff
热成像摄像机 收集特定频率的电磁波: 蓝色:温度较低:红色:温度较高
- lua--从白开始(2)
眼下lua最新的版本号,5.2.3. 这个例子是一个简单lua分析器,来源自<Lua游戏开发实践指南>. 测试程序的功能:解决简单lua说明,例如:print("Hello wo ...
- 编程算法 - 旋转矩阵 代码(C)
旋转矩阵 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 输出旋转矩阵, 使矩阵是按对角线螺旋上升, 在输出规则确定以后, 就能够推断, 上升规律是, ...
- Hibernate4与hibernate3有错误的版本号的主要区别所造成的不一致
Hibernate版本号修改 Hibernate4的修改较大仅仅有spring3.1以上版本号可以支持,Spring3.1取消了HibernateTemplate,由于Hibernate4的事务管理已 ...
- OpenGL(十一) BMP真彩文件的显示和复制操作
glut窗口除了可以绘制矢量图之外,还可以显示BMP文件,用函数glDrawPixels把内存块中的图像数据绘制到窗口上,glDrawPixels函数原型: glDrawPixels (GLsizei ...
- 手把手教你开发Nginx模块
前面的哪些话 关于Nginx模块开发的博客资料,网上很多,很多.但是,每篇博客都只提要点,无法"step by step"照着做,对于初次接触Nginx开发的同学,只能像只盲目的蚂 ...