最近做的一个项目要求密码输入框中只能输入数字和密码,不能输入特殊字符,在网上查了一点资料,实现了改功能,现在将实现的方法总结如下:
第一步:在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这个为输入前的字符串。