Ustaw maksymalną długość UITextField


Czy istnieje sposób na ustawienie maksymalnej długości w UITextField?
Coś jak atrybut MAXLENGTH w polach wejściowych HTML.
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Działa poprawnie za pomocą backspace i kopiowania & amp; Pasta:
#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;
}


UPDATE:

Zaktualizowano, aby zaakceptować klucz powrotny, nawet jeśli jest w maksymalnej długości. Dziękuję, panie Rogers!
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:


UPDATE

Nie mogę usunąć tej odpowiedzi, ponieważ została zaakceptowana, ale nie była poprawna. Oto poprawny kod, skopiowany poniżej z 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;
}


ORIGINAL

Myślę, że masz na myśli Uitextfield. Jeśli tak, to jest łatwy sposób.
  • Implementacja protokołu UITextFieldDelegate
  • Zaimplementuj metodę
    textField: shouldChangeCharactersInRange: replaceString:
    .

Ta metoda jest wywoływana za każdym razem, gdy dotkniesz znaku lub poprzednio zastąpisz znak. w tej metodzie możesz zrobić coś takiego:
- (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;
}
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Lepszą funkcją, która poprawnie obsługuje znaki backspace i ogranicza znaki do podanego limitu długości, jest następująca:
#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;
}

Hurra!
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Ten kod ogranicza tekst, a także umożliwia wprowadzanie znaków lub wklejanie ich w dowolnym miejscu w tekście. Jeśli wynikowy tekst jest zbyt długi, zmieni znaki w zakresie i skróci wynikowy tekst do limitu.
- (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;
}
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Myślę, że ten kod załatwi sprawę:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range 
replacementString:(NSString*)string
{
if (range.location >= MAX_LENGTH)
return NO;
return YES;
}

Dzięki tej metodzie delegowania możesz uniemożliwić użytkownikowi dodawanie większej liczby znaków niż MAX_LENGTH do pola tekstowego i opcjonalnie zezwolić użytkownikowi na wprowadzanie spacji.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Dla mnie to była magia:
if (textField.text.length >= 10 && range.length == 0)
return NO;
return YES;
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

tak rozwiązałem ten problem. Po osiągnięciu maksymalnego limitu nie będzie próbował dodawać kolejnych ... możesz tylko usuwać znaki
#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;
}
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Myślę, że nie ma takiej własności.
Ale tekst, który przypisujesz do UILabel, musi być NSString. A przed przypisaniem tego ciągu do właściwości tekstowej UILabel, możesz na przykład użyć następującej metody NSString, aby przyciąć ciąg o podanym indeksie (maksymalna długość):
- (NSString *)substringToIndex:(NSUInteger)anIndex
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Musisz wiedzieć, gdzie znajduje się tekst, a także długość dodanego tekstu (w przypadku, gdy wstawiają więcej niż jeden znak). Regularność między nimi w odniesieniu do długości maksymalnej polega na tym, że ich suma nigdy nie powinna przekraczać długości maksymalnej.
- (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;
}
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Jest to podobne do odpowiedzi konibiera, ale teraz pole tekstowe może zawierać maksymalnie MAXLENGTH znaków:
- (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;
}
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Musisz wyznaczyć jako przedstawiciela z
ViewDidLoad
TextFieldname.delegate=self

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się