UITextField 최대 길이 설정
이 질문에 이미 답변이 있습니다.
- UITextField 44 답변 의 최대 문자 길이 설정
UITextField에 최대 길이를 설정하는 방법이 있습니까?
HTML 입력 필드의 MAXLENGTH 속성과 같은 것입니다.
이것은 백 스페이스 및 복사 및 붙여 넣기에서 올바르게 작동합니다.
#define MAXLENGTH 10
- (BOOL)textField:(UITextField *) textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSUInteger oldLength = [textField.text length];
NSUInteger replacementLength = [string length];
NSUInteger rangeLength = range.length;
NSUInteger newLength = oldLength - rangeLength + replacementLength;
BOOL returnKey = [string rangeOfString: @"\n"].location != NSNotFound;
return newLength <= MAXLENGTH || returnKey;
}
업데이트 : MAXLENGTH에서도 리턴 키를 허용하도록 업데이트되었습니다. 감사합니다 Mr Rogers!
최신 정보
이 답변은 수락 된 답변이므로 삭제할 수 없지만 정확하지 않습니다. 다음은 아래 TomA에서 복사 한 올바른 코드입니다.
#define MAXLENGTH 10
- (BOOL)textField:(UITextField *) textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSUInteger oldLength = [textField.text length];
NSUInteger replacementLength = [string length];
NSUInteger rangeLength = range.length;
NSUInteger newLength = oldLength - rangeLength + replacementLength;
BOOL returnKey = [string rangeOfString: @"\n"].location != NSNotFound;
return newLength <= MAXLENGTH || returnKey;
}
실물
UITextField를 의미한다고 생각합니다. 그렇다면 간단한 방법이 있습니다.
- UITextFieldDelegate 프로토콜 구현
textField:shouldChangeCharactersInRange:replacementString:방법을 구현하십시오 .
이 메서드는 모든 문자 탭 또는 이전 문자 교체시 호출됩니다. 이 방법에서 다음과 같이 할 수 있습니다.
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
if ([textField.text length] > MAXLENGTH) {
textField.text = [textField.text substringToIndex:MAXLENGTH-1];
return NO;
}
return YES;
}
백 스페이스를 올바르게 처리하고 문자를 제공된 길이 제한으로 제한하는 더 나은 기능은 다음과 같습니다.
#define MAXLENGTH 8
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
int length = [textField.text length] ;
if (length >= MAXLENGTH && ![string isEqualToString:@""]) {
textField.text = [textField.text substringToIndex:MAXLENGTH];
return NO;
}
return YES;
}
건배!
이 코드는 텍스트를 제한하는 동시에 문자를 입력하거나 텍스트에 붙여 넣을 수 있습니다. 결과 텍스트가 너무 길면 범위의 문자를 변경하고 결과 텍스트를 한계까지 자릅니다.
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
NSUInteger newLength = [textField.text length] - range.length + [string length];
if (newLength >= MAXLENGTH) {
textField.text = [[textField.text stringByReplacingCharactersInRange:range withString:string] substringToIndex:MAXLENGTH];
return NO;
}
return YES;
}
이 코드가 트릭을 할 것이라고 생각합니다.
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range
replacementString:(NSString*)string
{
if (range.location >= MAX_LENGTH)
return NO;
return YES;
}
이 델리게이트 메소드를 사용하면 사용자가 텍스트 필드에 MAX_LENGTH보다 많은 문자를 추가하지 못하도록 할 수 있으며 필요한 경우 사용자가 백 스페이스를 입력 할 수 있어야합니다.
나를 위해 이것은 마술을했습니다.
if (textField.text.length >= 10 && range.length == 0)
return NO;
return YES;
이것이 내가 그 문제를 해결 한 방법입니다. 최대 한도에 도달하면 추가를 시도하지 않습니다. 문자 만 제거 할 수 있습니다.
#define MAX_SIZE ((int) 5)
...
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
if ([textField.text length] >= MAX_SIZE && ![string isEqualToString:@""]) {
return NO;
}
return YES;
}
I think there's no such property.
But the text you assign to the UILabel has to be an NSString. And before you assign this string to the UILabel's text property you can for example use the following method of NSString to crop the string at a given index (your maxlength):
- (NSString *)substringToIndex:(NSUInteger)anIndex
This is similar to coneybeare's answer, but now the text field can contain a maximum of MAXLENGTH symbols:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
if ([textField.text length] > MAXLENGTH - 1) {
textField.text = [textField.text substringToIndex:MAXLENGTH];
return NO;
}
return YES;
}
You have to be aware of the location the text is placed in as well as the length of text being added (in case they're pasting more than one character). The pattern between these with respect to max length is that their sum should never exceed the max length.
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSInteger locationAndStringLengthSum = range.location + [string length];
if ([textField isEqual:_expirationMonthField]) {
if (locationAndStringLengthSum > EXP_MONTH_FIELD_MAX_CHAR_LENGTH) {
return NO;
}
}
else if ([textField isEqual:_expirationYearField]) {
if (locationAndStringLengthSum > EXP_YEAR_FIELD_MAX_CHAR_LENGTH) {
return NO;
}
}
else if ([textField isEqual:_securityCodeField]) {
if (locationAndStringLengthSum > SECURITY_FIELD_MAX_CHAR_LENGTH) {
return NO;
}
}
else if ([textField isEqual:_zipCodeField]) {
if (locationAndStringLengthSum > ZIP_CODE_MAX_CHAR_LENGTH) {
return NO;
}
}
return YES;
}
You need to assign delegate on ViewDidLoad
TextFieldname.delegate=self
참고URL : https://stackoverflow.com/questions/2523501/set-uitextfield-maximum-length
'program story' 카테고리의 다른 글
| Node.js가 연결되지 않음 오류 (0) | 2020.11.22 |
|---|---|
| Laravel 5+ Ubuntu 14.04에서 500 내부 서버 오류 발생 (0) | 2020.11.22 |
| Bash에서 문자열의 각 문자에 대해 for 루프를 수행하는 방법은 무엇입니까? (0) | 2020.11.22 |
| Mongo에서 $ addToSet에 대한 키를 지정할 수 있습니까? (0) | 2020.11.21 |
| Markdown에서 오른쪽 정렬 및 양쪽 정렬 방법은 무엇입니까? (0) | 2020.11.21 |