由于将确定按钮去掉了,所以需要重新修改下代码,当输入第四个数字时,自动进入房间。
 
iOS 密码框效果图:

 

 
实现方式:
 
首先声明一个block初始化方法,因为这只是个框框,并不需要处理网络请求等等,需要提供一个block给调用方,调用方利用block 去拿到密码,利用密码做一些开房间等操作。
 
利用计时器通过0.2秒来看清输入第四位密码,用户输入4位密码后自动进入下一步操作。
 
1.头文件需要定义:
 
@classIDSGameRoomSecretView;

typedefvoid(^selfhandleInputPasswordBlock)(NSString *password ,IDSGameRoomSecretView *secretView);

@interface IDSGameRoomSecretView : UIView

- (instancetype)initWithselfPasswordCallBack:(selfhandleInputPasswordBlock)passwordCallback;

/**
 *  弹出密码框视图
 */
- (void)showInputSecretView;

/**
 *  移除密码框view 通过外部通过block来移除
 */
- (void)removeView;

/**
 *  重置密码操作
 */
-(void)resetTextField;

@end

2.初始化操作:
 
 
- (instancetype)initWithselfPasswordCallBack:(selfhandleInputPasswordBlock)passwordCallback
{
    if (self = [superinit]) {
        self.onselfHandlePasswordCallBack = passwordCallback;
    }
   
    returnself;
}
.
3.建立密码框View
 
Ps:通过4个UITextField 来声明4个密码框,
 
- (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, 290/2)];
    self.secretRoomView.backgroundColor = [UIColorwhiteColor];
    self.secretRoomView.centerX = SCREEN_WIDTH/2;
    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];

        //苹果文档上提到过一次,tag值较小的,如0-100为苹果保留使用,而0就是保留着给自己这个view使用的
        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];
    }
   
    [selfaddSubview:self.secretRoomView];
   
    self.secretRoomView.layer.cornerRadius = 10.f;
    self.secretRoomView.layer.masksToBounds = YES;
}
 
.
4. 移除View
 
//移除密码框View
- (void)removeView
{
    [selfremoveFromSuperview];
}
.
5. TextField输入字符代理方法
 
//通过TextField代理来控制不同textfield字符的添加以及删除,以及判断第4个Textfield自动调用成功block方法
-(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];
        }
    }
   
    for (UITextField *tf inself.textFieldArray) {
        if([tf.textisEqualToString:@""]) {
            returnNO;
        }
    }

    if (![_queryNoticeTimerisValid]) {
        [selfstartQueryTimer];
    }
    returnNO;
}

.
6. TextField输入删除键删除字符代理
//点击退格键的代理
#pragma mark - PZXTextFieldDelegate
-(void)PZXTextFieldDeleteBackward:(PZXVerificationTextField *)textField{
   
    if (textField.tag > [[_textFieldArrayfirstObject] tag]) {
       
        UITextField *newTF =  (UITextField *)[selfviewWithTag:textField.tag-1];
        newTF.text = @"";
        [newTF becomeFirstResponder];
    }  
}
.
7. 重置密码
-(void)resetTextField{
   
    for (UITextField *tf inself.textFieldArray) {
        tf.text = @"";
        [tf resignFirstResponder];
    }
    [[_textFieldArrayfirstObject] becomeFirstResponder];
}
.
8.获取密码,进入block操作
 
-(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);
    }
    if (self.onselfHandlePasswordCallBack) {
        self.onselfHandlePasswordCallBack(str,self);
    }
    [selfstopQueryTimer];
}
.
9.手势操作
 
-(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;
}

.
10.计时器操作
 
Ps: 计时器的作用是防止密码输入到第四个字母时,用户来不及看清第四个字母,就直接进入房间操作,所以利用计时器,0.2秒才会进入下一步操作,让用户在0.2秒内看到输入第4位密码。
 
- (void)startQueryTimer
{
    [selfstopQueryTimer];
   
    if (nil == _queryNoticeTimer) {
        _queryNoticeTimer = [NSTimerscheduledTimerWithTimeInterval:sIntervalTime
                                                             target:self
                                                           selector:@selector(getVertificationCode)
                                                           userInfo:nilrepeats:NO];
    }
}

- (void)stopQueryTimer
{
    if (self.queryNoticeTimer) {
       
        [self.queryNoticeTimerinvalidate];
        _queryNoticeTimer = nil;
    }
}

 

iOS密码框实现(二)取消确定按钮的更多相关文章

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

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

  2. iOS密码框的实现方式

    说一下密码加密的实现方式   效果图:           实现方式:   主要说一下密码框的实现,这个密码框中间的四个数字其实是4个 UITextField ,然后通过键盘删除键 和TextFile ...

  3. HTML5:去除IE10中输入框和密码框的X按钮和小眼睛

    在IE10和之后的IE版本中,当在输入框和密码框中输入的时候,后面会自动出现X按钮和小眼睛,如下图所示:  令人苦恼的是,这个效果只有IE才有,其它浏览器是没有这个功能的.为了统一,我们就需要去掉这个 ...

  4. iOS点击获取短信验证码按钮

    概述 iOS点击获取短信验证码按钮, 由于 Demo整体测试运行效果 , 整个修改密码界面都已展现, 并附送正则表达式及修改密码逻辑. 详细 代码下载:http://www.demodashi.com ...

  5. iOS警告框和操作表

    应用如何与用户交流呢? 警告框(AlertView)和操作表(ActionSheet)就是为此而设计的. 本文案例的原型草图如图3-48所示,其中有两个按钮“Test警告框”和“Test操作表”,点击 ...

  6. JAVA 文本框、密码框、标签

    //文本框,密码框,标签 import java.awt.*; import javax.swing.*; public class Jiemian5 extends JFrame{ JPanel m ...

  7. iOS:提示框(警告框)控件UIAlertView的详解

    提示框(警告框)控件:UIAlertView   功能:当点击按钮或标签等时,弹出一个提示框,显示必要的提示,然后通过添加的按钮完成需要的功能.   类型:typedef NS_ENUM(NSInte ...

  8. iOS系列 基础篇 06 标签和按钮 (Label & Button)

    iOS系列 基础篇 06 标签和按钮 (Label & Button) 目录: 标签控件 按钮控件 小结 标签和按钮是两个常用的控件,下面咱们逐一学习. 1. 标签控件 使用Single Vi ...

  9. iOS使用Zbar扫描二维码

    iOS使用Zbar扫描二维码 标签(空格分隔):二维码扫描 iOS Zbar64位 正文: 首先下载一个支持64位系统的ZbarSDK的包,保存在了我的云盘里,地址:ZbarSDK 把文件拖到工程里面 ...

随机推荐

  1. Objective-C 数据类型 (一)

    数据类型分为三类:基本数据类型,对象类型,id类型. 基本数据类型:int ,float double char 对象类型:类,指针对象,协议 id类型:可以表示对象类型(在表示对象类型的时候 不需要 ...

  2. Twitter "like" 动画实战

    http://zhuanlan.zhihu.com/FrontendMagazine/20486738

  3. tinkerpop(1) 地图数据库console科研

    原创文章连接: http://blog.csdn.net/freewebsys/article/details/46348975 转载请注明出处. 1,关于图数据库 tinkerpop是apache孵 ...

  4. Codeforces 15C Industrial Nim 简单的游戏

    主题链接:点击打开链接 意甲冠军: 特定n 下列n行,每一行2的数量u v 表达v礧:u,u+1,u+2···u+v-1 问先手必胜还是后手必胜 思路: 首先依据Nim的博弈结论 把全部数都异或一下, ...

  5. matlab 工具函数 —— logdet(A)

    当参数 A 是正定矩阵(positive definite)时,logdet 利用相关矩阵分解的性质,将比 log(det(A)) 获得更快的效率: function y = logdet(A) tr ...

  6. Global Contrast based Salient Region Detection (Ming ming Cheng)

    abstract: Automatic estimation of salient object regions across images, without any prior assumption ...

  7. Android Studio怎样提示函数使用方法

    Eclipse有一个非常好的功能,就是当你代码调用某个android API时,鼠标移到相应的函数或者方法上,就会自己主动有一个悬 浮窗提示该函数的说明(所包括的參数含义,该方法功能).迁移到Andr ...

  8. python 教程 第十六章、 正则表达式

    第十六章. 正则表达式 1)    匹配多个表达式 记号  re1|re2 说明  匹配正则表达式re1或re2 举例  foo|bar  匹配  foo, bar 记号  {N} 说明  匹配前面出 ...

  9. sql service添加索引

    语法:CREATE [索引类型] INDEX 索引名称ON 表名(列名)WITH FILLFACTOR = 填充因子值0~100GO /*实例*/USE 库名GOIF EXISTS (SELECT * ...

  10. JSON的一些要点总结 专题

    JavaScript Object Notation CSRF (pronounced sea-surf) 字面量(literal):字符串的意思和要表达的意思是一致的 JSON 是一种数据交换格式( ...