由于将确定按钮去掉了,所以需要重新修改下代码,当输入第四个数字时,自动进入房间。
 
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. webcollector + selenium 爬取空间相册图片

    package cn.hb.util; import java.io.File; import java.io.FileNotFoundException; import java.io.FileWr ...

  2. 全文检索(elasticsearch入门)

    Elasticsearch篇: Elasticsearch是一个采用java语言开发的,基于Lucene构造的开源,分布式的搜索引擎. 设计用于云计算中,能够达到实时搜索,稳定可靠. Elastics ...

  3. Druid 专题

    数据源配置: #datasource #Introductions: https://github.com/alibaba/druid/wiki/DruidDataSource%E9%85%8D%E7 ...

  4. ElasticSearch的javaAPI之Client

    翻译的原文:http://www.elasticsearch.org/guide/en/elasticsearch/client/java-api/current/client.html#node-c ...

  5. 常用软件的安装(windows/linux)

    1. matlab 2016b (两个 iso 文件)(windows) MATLAB R2016b 安装教程 2. clion 在 ubuntu 下的安装 ubuntu 14.04 Clion201 ...

  6. jquer表单序列化加强版

    相同name值会转化为一个数组 $.fn.serializeObject = function(){ var o = {}; var a = this.serializeArray(); $.each ...

  7. WPF中使用Hashtable剔除重复字符串(比如电话号码)

    原文:WPF中使用Hashtable剔除重复字符串(比如电话号码) 本文中的输入框中的字符串是逗号隔开的,你可以换成其他特别的字符串.本篇中的亮点:1. 里面有一个玻璃样式按钮,用XAML制作2. W ...

  8. [视频]产品营销之拍出好电子产品,Peter Belanger是如何为苹果产品拍照的

    Peter Belanger –他就是那些颠覆你想象的苹果产品照片的摄影师.作为旧金山的顶级产品图片设计师的 Peter,他还拥有 eBay, Nike, Pixer 和 Square 等客户. 让我 ...

  9. 2015微软创新杯Imaginecup正在进行参赛(报名截止日期2014年12月31日本23:59)

    CSDN高校俱乐部与微软官方合作,2015微软创新杯大赛中国区官网落户CSDN高校俱乐部:http://student.csdn.net/mcs/imaginecup2015 在微软官方设置创新杯中国 ...

  10. WPF编游戏系列 之九 物品清单再优化

    原文:WPF编游戏系列 之九 物品清单再优化        在"第三篇"和"第四篇"中通过用户控件和数据绑定功能对物品清单进行一些优化减少了部分C#代码,但感觉 ...