#objective-c #cocoa-touch #ios #uitextfield #uitextfielddelegate
#цель-c #cocoa-touch #iOS #uitextfield #uitextfielddelegate
Вопрос:
У меня их четыре UITextField
, и я хотел бы ограничить длину каждого из них, но все они разной длины. Пока у меня есть следующий код, но он работает не совсем корректно
define MAXLENGTH 5
define MAXQTY 3
define MAXSIZE 4
define MAXBRAND 10
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
int lengtha = [brand.text length] ;
NSLog(@"lenghta = %d",lengtha);
if (lengtha >= MAXBRAND amp;amp; ![string isEqualToString:@""]) {
brand.text = [brand.text substringToIndex:MAXBRAND];
return NO;
}
return YES;
int lengthb = [qty.text length] ;
NSLog(@"lenghtb = %d",lengtha);
if (lengthb >= MAXQTY amp;amp; ![string isEqualToString:@""]) {
qty.text = [qty.text substringToIndex:MAXQTY];
return NO;
}
return YES;
int lengthc = [size.text length] ;
NSLog(@"lenghtc = %d",lengtha);
if (lengthc >= MAXSIZE amp;amp; ![string isEqualToString:@""]) {
size.text = [size.text substringToIndex:MAXSIZE];
return NO;
}
return YES;
int lengthd = [price.text length] ;
NSLog(@"lenghtd = %d",lengtha);
if (lengthd >= MAXLENGTH amp;amp; ![string isEqualToString:@""]) {
price.text = [price.text substringToIndex:MAXLENGTH];
return NO;
}
return YES;
}
Комментарии:
1. Как только ваш код достигает первого «return YES;» после инструкции if, больше ничего не обрабатывается. Ваша логика неверна.
Ответ №1:
Если марка, количество, размер и цена являются переменными экземпляра (или свойствами) и подключены к вашим UITextFields, вы могли бы попробовать это:
define MAXLENGTH 5
define MAXQTY 3
define MAXSIZE 4
define MAXBRAND 10
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
if (textField == brand) {
int lengtha = [brand.text length];
NSLog(@"lenghta = %d",lengtha);
if (lengtha >= MAXBRAND amp;amp; ![string isEqualToString:@""]) {
brand.text = [brand.text substringToIndex:MAXBRAND];
return NO;
}
return YES;
} else if (textField == qty) {
int lengthb = [qty.text length];
NSLog(@"lenghtb = %d",lengthb);
if (lengthb >= MAXQTY amp;amp; ![string isEqualToString:@""]) {
qty.text = [qty.text substringToIndex:MAXQTY];
return NO;
}
return YES;
} else if (textField == size) {
int lengthc = [size.text length];
NSLog(@"lenghtc = %d",lengthc);
if (lengthc >= MAXSIZE amp;amp; ![string isEqualToString:@""]) {
size.text = [size.text substringToIndex:MAXSIZE];
return NO;
}
return YES;
} else if (textField == price) {
int lengthd = [price.text length];
NSLog(@"lenghtd = %d",lengthd);
if (lengthd >= MAXLENGTH amp;amp; ![string isEqualToString:@""]) {
price.text = [price.text substringToIndex:MAXLENGTH];
return NO;
}
return YES;
}
return YES;
}
Комментарии:
1. Я внес изменения в код в соответствии с вашим предложением, и я все еще получаю тот же результат, текстовое поле не ограничено, и NSLog не сообщает о количестве символов. У меня все UITextFields настроены в файле .h, а IBOutlets также в файле .h
2. Я исправил это, ваш код великолепен, я добавил brand.delegate=self в viewDidLoad, и теперь он отлично работает, спасибо за вашу помощь
3. Да, вы должны установить делегат для всех четырех UITextFields. Также я немного отредактировал свой приведенный выше код. Вы всегда вводили NSLogging lengtha во всех четырех случаях вместо того, чтобы каждый раз использовать правильную переменную (lengtha, lengthb, lengthc, lengthd).