zoukankan      html  css  js  c++  java
  • mac 密码输入框控制——只能输入数字和字母,禁止特殊字符的输入

    最近做的一个项目要求密码输入框中只能输入数字和密码,不能输入特殊字符,在网上查了一点资料,实现了改功能,现在将实现的方法总结如下:

    第一步:在xib文件中拖放一个Secure Text Field 控件,按住option键,在.h文件中添加一个NSSecureTextField对象,

    IBOutlet NSSecureTextField * pintext;

    第二步:拖放一个object对象到xib中,将其告诉:PasswordFormatter;

    第三步:右击Secure Text Field 控件,将formatter的插座变量指向PasswordFormatter。

    下面是PasswordFormatter的实现代码

    #import <Foundation/Foundation.h>
    @interface PasswordFormatter : NSFormatter {
    @private
        int maxlen; 
    }
    - (void)setMaximumLength:(int)len;
    - (int)maximumLength;
    @end

    最后在类的实现部分写入如下代码:

    #import "PasswordFormatter.h"
    @implementation PasswordFormatter
    - (id)init
    {
        self = [super init];
        if (self) {
            maxlen= 8;
        }
        return self;
    }
    
    - (void)dealloc
    {
        [super dealloc];
    }
    
    - (void)setMaximumLength:(int)len {
        maxlen= len;
    }
    
    - (int)maximumLength {
        return maxlen;
    }
    
    - (NSString*)stringForObjectValue:(id)object
    {
        return (NSString*)object; 
    }
    
    - (BOOL)getObjectValue:(id*)object forString:(NSString*)string errorDescription:(NSString**)error 
    {
        *object = string;
        return YES;
    }
    
    //下面的方法是在输入框中输入时自动调用的
    - (BOOL)isPartialStringValid:(NSString**)partialStringPtr
           proposedSelectedRange:(NSRangePointer)proposedSelRangePtr
                  originalString:(NSString*)origString
           originalSelectedRange:(NSRange)origSelRange
                errorDescription:(NSString**)error 
    {
        //下面的是控制密码的长度是8个字符,如果大于8则不能输入
        if([*partialStringPtr length] == 0)
        {
            return YES;
        }
        if([*partialStringPtr length] >8)
        {
            return NO;
        }
    
        NSRange passwordRange;
        NSString *strLetterDigital = @"1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM";
        NSString *strPassword;
    
    
        //使用characterSetWithCharactersInString初始化字符集
        NSCharacterSet *charactersetDigitAndLetter =[NSCharacterSet characterSetWithCharactersInString:strLetterDigital];
        charactersetDigitAndLetter = [charactersetDigitAndLetter invertedSet];
        passwordRange =NSMakeRange(origSelRange.location,
                                    proposedSelRangePtr->location
                                    - origSelRange.location);
        strPassword= [*partialStringPtr substringWithRange: passwordRange];
        if([strPassword rangeOfCharacterFromSet: charactersetDigitAndLetter
                                           options:NSLiteralSearch].location!=NSNotFound) 
        {
            *error =@"不是数字和字母";
            return(NO);
        }else
        {
            *error =nil;
            return(YES);
        }
    }
    
    - (NSAttributedString*)attributedStringForObjectValue:(id)anObject withDefaultAttributes:(NSDictionary*)attributes {
        return nil;
    }
    
    @end

    isPartialStringValid是在每次输入一个字符后自动执行,partialStringPtr是每次用户输入后的字符串,若格式化器返回NO,表示partialStringPtr不合法。若为YES表示接受新字符串。其中origString这个为输入前的字符串。

  • 相关阅读:
    nginx日志格式字段
    set_include_path和get_include_path用法详解
    nginx try_files 详解
    ul ol li的序号编号样式
    PHP中报500错误时如何查看错误信息
    nginx的access.log文件详解
    一些常用服务命令和配置目录
    PHP 使用 Redis
    HTML5-indexedDB使用常见错误总结
    浏览器数据库 IndexedDB 入门
  • 原文地址:https://www.cnblogs.com/watchdatalearn2012620/p/2876773.html
Copyright © 2011-2022 走看看