【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.)
Reference
이 문제에 관하여(【iOS】UITextField 에서의 알파벳 대문자 제한, 길이 제한), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/a__i__r/items/2a0afcc6d95d17c1eb63텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)