• iOS 仿支付宝密码支付


    代码地址如下:
    http://www.demodashi.com/demo/11484.html

    一、准备工作

    • xcode
    • 主要实现输入密码的时候不可见

    二、程序实现

    目录结构

    • 实现思路怎样
      在支付宝输入密码的时候,如果你不仔细看的话,你就会认为,握草,不是很简单的一个UITextField 然后将属性secureTextEntry设置为YES就可以么,然并....也许这才是支付宝做的好的地方吧,居然在输入密码的时候,什么什么也看不到,哪怕是一个数字,也不会有一闪然后变成黑点的效果。那么,问题来了,我们该怎么实现呢,在静静思考十几分钟后,终于有一个大概方法,那就是在输入密码的UITextField上面加view,并且设置为黑色,造成一种假象,而UITextField还是和普通的输入一样,只是输入的内容和光标不能被用户所看到。
    • 具体设计到哪些代码
      问题一 :如何解决用户看不到输入内容和光标
    -(GLTextField *)passwordField
    {
        if (nil == _passwordField)
        {
            _passwordField = [[GLTextField alloc] initWithFrame:CGRectMake((kScreenWidth - 44 * 6)/2.0, 100, 44 * 6, 44)];
            _passwordField.delegate = (id)self;
            _passwordField.backgroundColor = [UIColor whiteColor];
            //将密码的文字颜色和光标颜色设置为透明色
            //之前是设置的白色 这里有个问题 如果密码太长的话 文字和光标的位置如果到了第一个黑色的密码点的时候 就看出来了
            _passwordField.textColor = [UIColor clearColor];
            _passwordField.tintColor = [UIColor clearColor];
            [_passwordField setBorderColor:UIColorFromRGB(0xdddddd) 1];
            _passwordField.keyboardType = UIKeyboardTypeNumberPad;
            _passwordField.secureTextEntry = YES;
            [_passwordField addTarget:self action:@selector(passwordFieldDidChange:) forControlEvents:UIControlEventEditingChanged];
        }
        return _passwordField;
    }
    

    问题二 :怎么做到输入密码的时候黑点显示或消失一致

    -(void)passwordFieldDidChange:(UITextField *)field
    {
        [self setDotsViewHidden];
    
        for (int i = 0; i < _passwordField.text.length; i ++)
        {
            if (_passwordDotsArray.count > i )
            {
                UIView *dotView = _passwordDotsArray[i];
                [dotView setHidden:NO];
            }
        }
        
        
        if (_passwordField.text.length == 6)
        {
            NSString *password = _passwordField.text;
            if ([password isEqualToString:_password])
            {
                    NSLog(@" 打印信息  密码正确");
            }
            else
            {
                UIAlertController *alertController = [UIAlertController alertControllerWithTitle:nil message:@"密码错误,请重新输入" preferredStyle:UIAlertControllerStyleAlert];
                
                // Create the actions.
                UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) {
                    
                    [self cleanPassword];
                    
                }];
                
                // Add the actions.
                [alertController addAction:cancelAction];
                
                [self presentViewController:alertController animated:YES completion:nil];
            }
        }
    }
    
    //将所有的假密码点设置为隐藏状态
    - (void)setDotsViewHidden
    {
        for (UIView *view in _passwordDotsArray)
        {
            [view setHidden:YES];
        }
    }
    
    

    问题三:由于UITextField 是可以复制其内容的,怎么屏蔽呢?
    这里我采取的方法是继承 UITextField 然后重写方法
    - (BOOL)canPerformAction:(SEL)action withSender:(id)sender

    //禁止粘贴复制全选等
    - (BOOL)canPerformAction:(SEL)action withSender:(id)sender
    {
        UIMenuController *menuController = [UIMenuController sharedMenuController];
        if (menuController) {
            [UIMenuController sharedMenuController].menuVisible = NO;
        }
        return NO;
    }
    
    

    三、运行效果

    • 直接下载demo进行运行即可
    • 运行时的截图

      iOS 仿支付宝密码支付

    代码地址如下:
    http://www.demodashi.com/demo/11484.html

    注:本文著作权归作者,由demo大师代发,拒绝转载,转载需要作者授权

  • 相关阅读:
    自调用匿名函数和js的Module模式
    设置一天中不同时段的倒计时,计算时针和分针的夹角
    移动端web开发中对点透的处理,以及理解fastclick如何做到去除300ms延迟
    使用Fiddler改变线上js文件的引用路径
    Linux下常用设置文件和文件夹读写权限操作
    RESTful API
    mysql之load语句
    Django学习之点赞功能
    Django学习之网站图标
    python学习之pyenv
  • 原文地址:https://www.cnblogs.com/demodashi/p/8509133.html
Copyright © 2020-2023  润新知