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에 따라 라이센스가 부여됩니다.