iOS 입력 상자의 특수한 제한 코드 UITExtField 공유(Validation)
6620 단어 ios 개발
// ,
#import <UIKit/UIKit.h>
typedef enum{
VALIDATION_TYPE_NUM_VALIDATED = 0,//
VALIDATION_TYPE_ID_CARD_VALIDATED = 1,//
VALIDATION_TYPE_MOBILE_PHONE_VALIDATED = 2,//
VALIDATION_TYPE_EMAIL_VALIDATED = 3,//email
} ValidationType;
@interface UITextField (Validation)
-(void)setValidationType:(ValidationType)validationType;
-(NSString *)errorMessage;
- (void)limitTextLength:(int)length;
@end
#import "UITextField+Validation.h"
#import <objc/objc.h>
#import <objc/runtime.h>
static NSString *kLimitTextMaxLengthKey = @"kLimitTextMaxLengthKey";
static NSString *kLimitTextErrorMessageKey = @"kLimitTextErrorMessageKey";
@implementation UITextField (Validation)
-(void)resetTextfieldValidation
{
objc_setAssociatedObject(self, (__bridge const void *)(kLimitTextErrorMessageKey), nil, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
-(void)setValidationType:(ValidationType)validationType
{
[self addTarget:self action:@selector(resetTextfieldValidation) forControlEvents:UIControlEventEditingDidBegin];
self.keyboardType = UIKeyboardTypeDefault;
if (validationType == VALIDATION_TYPE_NUM_VALIDATED) {
[self limitTextOnlyNumber];
self.keyboardType = UIKeyboardTypeNumberPad;
}else if(validationType == VALIDATION_TYPE_EMAIL_VALIDATED){
[self limitTextOnlyEmail];
self.keyboardType = UIKeyboardTypeEmailAddress;
}else if(validationType == VALIDATION_TYPE_MOBILE_PHONE_VALIDATED){
[self limitTextOnlyPhone];
self.keyboardType = UIKeyboardTypePhonePad;
}else if(validationType == VALIDATION_TYPE_ID_CARD_VALIDATED){
[self limitTextOnlyIDCard];
}
[self limitTextNoSpace];
}
-(NSString *)errorMessage
{
NSString *str= objc_getAssociatedObject(self, (__bridge const void *)(kLimitTextErrorMessageKey));
if (str) {
return str;
}
return nil;
}
#pragma mark - Limit Text Length
- (void)limitTextLength:(int)length
{
objc_setAssociatedObject(self, (__bridge const void *)(kLimitTextMaxLengthKey), [NSNumber numberWithInt:length], OBJC_ASSOCIATION_RETAIN_NONATOMIC);
[self addTarget:self action:@selector(textFieldTextLengthLimit:) forControlEvents:UIControlEventEditingChanged];
}
- (void)textFieldTextLengthLimit:(id)sender
{
NSNumber *maxLengthNumber = objc_getAssociatedObject(self, (__bridge const void *)(kLimitTextMaxLengthKey));
int maxLength = [maxLengthNumber intValue];
if(self.text.length > maxLength){
self.text = [self.text substringToIndex:maxLength];
}
}
#pragma mark - Limit Text Only Number
-(void)limitTextOnlyNumber
{
[self addTarget:self action:@selector(textFieldTextNumberLimit:) forControlEvents:UIControlEventEditingChanged];
}
- (void)textFieldTextNumberLimit:(id)sender
{
if (!self.text.length) {
[self resetTextfieldValidation];
return;
}
NSString * regexNum = @"^\\d*$";
NSPredicate *regexNumPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",regexNum];
if ([regexNumPredicate evaluateWithObject:self.text]==YES) {
}else{
self.text=[self.text substringFromIndex:self.text.length];
}
}
#pragma mark - Limit Text Only Phone
-(void)limitTextOnlyPhone
{
[self addTarget:self action:@selector(textFieldTextPhoneLimit:) forControlEvents:UIControlEventEditingDidEnd];
[self limitTextLength:11];
[self limitTextOnlyNumber];
}
- (void)textFieldTextPhoneLimit:(id)sender
{
if (!self.text.length) {
[self resetTextfieldValidation];
return;
}
// NSString * regex=@"^((13[0-9])|(147)|(15[^4,\\D])|(18[0,5-9]))\\d{8}$";
NSString * regex=@"^1\\d{10}$";
NSPredicate *regexPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",regex];
if ([regexPredicate evaluateWithObject:self.text]==YES) {
self.text=[self.text substringToIndex:self.text.length];
[self resetTextfieldValidation];
}else{
self.text=[self.text substringToIndex:self.text.length];
objc_setAssociatedObject(self, (__bridge const void *)(kLimitTextErrorMessageKey), @" ", OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
}
#pragma mark - Limit Text For Email
-(void)limitTextOnlyEmail
{
[self addTarget:self action:@selector(textFieldTextForEmailLimit:) forControlEvents:UIControlEventEditingDidEnd];
}
- (void)textFieldTextForEmailLimit:(id)sender
{
if (!self.text.length) {
[self resetTextfieldValidation];
return;
}
NSString *regex=@"^[a-zA-Z0-9][\\w\\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\\w\\.-]*[a-zA-Z0-9]\\.[a-zA-Z][a-zA-Z\\.]*[a-zA-Z]$";
NSPredicate *regexPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",regex];
if ([regexPredicate evaluateWithObject:self.text]==YES) {
[self resetTextfieldValidation];
}else{
objc_setAssociatedObject(self, (__bridge const void *)(kLimitTextErrorMessageKey), @" ", OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
}
#pragma mark - Limit Text For IDCard
-(void)limitTextOnlyIDCard
{
[self addTarget:self action:@selector(textFieldTextForIDCardLimit:) forControlEvents:UIControlEventEditingDidEnd];
[self limitTextLength:18];
}
- (void)textFieldTextForIDCardLimit:(id)sender
{
if (!self.text.length) {
[self resetTextfieldValidation];
return;
}
//NSString *regex=@"^(4\\d{12}(?:\\d{3})?)$";
NSString *regex=@"^([1-9]\\d{7}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3})|([1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}([0-9]|X))$";
NSPredicate *regexPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",regex];
if ([regexPredicate evaluateWithObject:self.text]==YES) {
[self resetTextfieldValidation];
}else{
objc_setAssociatedObject(self, (__bridge const void *)(kLimitTextErrorMessageKey), @" ", OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
}
#pragma mark - Limit Text NoSpace
- (void)limitTextNoSpace
{
[self addTarget:self action:@selector(textFieldTextNoSpaceLimit:) forControlEvents:UIControlEventEditingDidEnd];
}
- (void)textFieldTextNoSpaceLimit:(id)sender
{
self.text = [self noSpaceString:self.text];
}
- (NSString *)noSpaceString:(NSString *)str
{
if (str.length) {
return [str stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceCharacterSet]];
}
return str;
}
@end
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
IOS 개발 포스트 방식으로 서버 데이터 가져오기텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.