【iOS】UITextField 에서의 알파벳 대문자 제한, 길이 제한
                                            
                                                
                                                
                                                
                                                
                                                
                                                 13196 단어  XcodeiOSUITextFieldObjective-C
                    
UITextField의 알파벳 대문자 제한
iOS 앱에서 입력 상자로 사용되는 UITextField에서,
알파벳 대문자 전용 입력으로 제한하고 싶습니다!
Android의 경우 【Android】EditText에서 알파벳 대문자 제한, 길이 제한을 참조하십시오.
 환경
호스트: MaxOS Mojave
Xcode: 10
Objective-C
 입력시 키보드 설정
StoryBoard에서 대상 UITextField를 선택하여 Attributes Inspector를 열고 편집합니다.
 
 설정 방법
호스트: MaxOS Mojave
Xcode: 10
Objective-C
입력시 키보드 설정
StoryBoard에서 대상 UITextField를 선택하여 Attributes Inspector를 열고 편집합니다.
 
 설정 방법
MyView.h
@interface MyView : UIViewController<UITextFieldDelegate, ...>
@property (weak, nonatomic) IBOutlet UITextField *targetField;
@end
함수 준비
Constant.mNSString* const ALPHABET_UPPER = @"ABCDEFGHIJKLMNOPQRSTUVWXYZ";
NSString* const ALPHASPACE_ONLY = @"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ ";
+(NSString*) getAlphabetUpperCharacters {
    return ALPHABET_UPPER;
}
+(NSString*) getAlphaSpaceCharacters {
    return ALPHASPACE_ONLY;
}
// アルファベット+スペース以外があるかチェック
+(BOOL) containsAlphabetWithSpace:(NSString*) string {
    NSCharacterSet *alphaSet = [NSCharacterSet characterSetWithCharactersInString:[Constant getAlphaSpaceCharacters]];
    NSCharacterSet *invSet = [alphaSet invertedSet];
    NSRange range = [string rangeOfCharacterFromSet:invSet];
    if (range.location != NSNotFound) {
        NSLog(@"Except alphabet and space:%@", string);
        return false;
    }
    return true;
}
// アルファベット大文字以外があるかチェック
+(BOOL) containsAlphabetUpper:(NSString*) string {
    NSCharacterSet *alSet = [NSCharacterSet characterSetWithCharactersInString:[Constant getAlphabetUpperCharacters]];
    NSCharacterSet *invSet = [alSet invertedSet];
    NSRange range = [string rangeOfCharacterFromSet:invSet];
    if (range.location != NSNotFound) {
        NSLog(@"Except upper alphabet:%@", string);
        return false;
    }
    return true;
}
 Delegate 구현
NSString* const ALPHABET_UPPER = @"ABCDEFGHIJKLMNOPQRSTUVWXYZ";
NSString* const ALPHASPACE_ONLY = @"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ ";
+(NSString*) getAlphabetUpperCharacters {
    return ALPHABET_UPPER;
}
+(NSString*) getAlphaSpaceCharacters {
    return ALPHASPACE_ONLY;
}
// アルファベット+スペース以外があるかチェック
+(BOOL) containsAlphabetWithSpace:(NSString*) string {
    NSCharacterSet *alphaSet = [NSCharacterSet characterSetWithCharactersInString:[Constant getAlphaSpaceCharacters]];
    NSCharacterSet *invSet = [alphaSet invertedSet];
    NSRange range = [string rangeOfCharacterFromSet:invSet];
    if (range.location != NSNotFound) {
        NSLog(@"Except alphabet and space:%@", string);
        return false;
    }
    return true;
}
// アルファベット大文字以外があるかチェック
+(BOOL) containsAlphabetUpper:(NSString*) string {
    NSCharacterSet *alSet = [NSCharacterSet characterSetWithCharactersInString:[Constant getAlphabetUpperCharacters]];
    NSCharacterSet *invSet = [alSet invertedSet];
    NSRange range = [string rangeOfCharacterFromSet:invSet];
    if (range.location != NSNotFound) {
        NSLog(@"Except upper alphabet:%@", string);
        return false;
    }
    return true;
}
MyView.m
- (BOOL)textField:(UITextField *) textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    BOOL replaceUpper = false;
    NSUInteger maxLength = 0;
    // 位置情報
    UITextPosition* beginning = textField.beginningOfDocument;
    UITextPosition* start = [textField positionFromPosition:beginning offset:range.location];
    UITextPosition* end = [textField positionFromPosition:start offset:range.length];
    UITextRange* textRange = [textField textRangeFromPosition:start toPosition:end];
    if(textField == _targetField) {
        maxLength = 5;
        // check alphabet only
        if (![Constant containsAlphabetWithSpace:string]) {
            return false;
        }
        if (![Constant containsAlphabetUpper:string]) {
            replaceUpper = true;
        }
    }
    NSUInteger oldLength = [textField.text length];
    NSUInteger replacementLength = [string length];
    NSUInteger rangeLength = range.length;
    NSUInteger newLength = oldLength - rangeLength + replacementLength;
    if (newLength > maxLength) {
        return false;
    }
    if ([string rangeOfString: @"\n"].location != NSNotFound) {
        return false;
    }
    // テキスト置換は他の制限判定後
    if (replaceUpper) {
        [textField replaceRange:textRange withText:[string uppercaseString]];
        return false;
    }
    return true;
}
실제 기계 테스트
키보드로 숫자 입력을 할 수 없는 것, 길이의 제한이 되어 있는 것,
소문자를 입력하면 대문자로 자동 변환되는지 확인합니다.
이상, 수고하셨습니다!
                
                    
        
    
    
    
    
    
                
                
                
                
                    
                        
                            
                            
                            Reference
                            
                            이 문제에 관하여(【iOS】UITextField 에서의 알파벳 대문자 제한, 길이 제한), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
                                
                                https://qiita.com/a__i__r/items/2a0afcc6d95d17c1eb63
                            
                            
                            
                                텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
                            
                            
                                
                                
                                 우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)
                            
                            
                        
                    
                
                
                
            
Reference
이 문제에 관하여(【iOS】UITextField 에서의 알파벳 대문자 제한, 길이 제한), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/a__i__r/items/2a0afcc6d95d17c1eb63텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
                                
                                
                                
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)