#iphone #uitableview #uitextfield
#iPhone #uitableview #uitextfield
Вопрос:
Я вызываю метод делегирования UITableViewCell TextField: shouldChangeCharactersInRange:replacementString: в пользовательской ячейке, которая имеет четыре UITextFields и что происходит, как только достигается максимальная длина в одном из полей, он не позволяет вводить какой-либо текст в другие поля, потому что он всегда возвращает «no» для этого начального оператора if, который выполняется. есть идеи о том, как это обойти?
На данный момент я тестирую только два поля. Заранее благодарю вас за любую помощь.
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
int regFieldOnelength = [regFieldOne.text length] ;
int regFieldTwolength = [regFieldTwo.text length] ;
if ((regFieldOnelength >= MAXLENGTH amp;amp; ![string isEqualToString:@""]) || (regFieldTwolength >= MAXLENGTH amp;amp; ![string isEqualToString:@""])) {
if(regFieldOne.text = [regFieldOne.text substringToIndex:MAXLENGTH]){
return NO;
}
if(regFieldTwo.text = [regFieldTwo.text substringToIndex:MAXLENGTH]){
return NO;
}
}
return YES;
}
Ответ №1:
Почему вы используете booth текстовое поле, вместо этого используйте текущее текстовое поле, которое редактируется
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
int currentTxtLen = [textField.text length] ;
if (currentTxtLen >= MAXLENGTH amp;amp; ![string isEqualToString:@""]) {
return NO;
}
return YES;
}
Комментарии:
1. Здесь текущее текстовое поле передается в качестве аргумента
(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
методу2. Я думаю, я думал, что я хочу сохранить текст в текстовом поле в какой-то момент, поскольку я хочу объединить все поля вместе… как вы думаете, это хорошая идея или плохая .. я предполагаю, что плохая. лол, но если я использую ваш метод, как я буду извлекать текст из каждого поля после его ввода.
3. почему бы вам не создать IBOutlet, а затем просто получить текстовое значение из этого выхода.
4. И что вы подразумеваете под введенным?? Если у вас есть выходы, вы можете извлекать текст из текстового поля в любом месте вашего кода.
5. да, я могу это сделать, я просто не был уверен, использую ли я ваш метод, если строка все еще будет в текстовом поле?… Я собираюсь попробовать ваш метод сейчас .. хотя я все еще не совсем понимаю, как это будет работать.
Ответ №2:
Можете ли вы попробовать
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
int regFieldOnelength = [regFieldOne.text length] ;
int regFieldTwolength = [regFieldTwo.text length] ;
if((textField == regFieldOne) ||(textField == regFieldTwo)) {
if ((regFieldOnelength >= MAXLENGTH amp;amp; ![string isEqualToString:@""]) || (regFieldTwolength >= MAXLENGTH amp;amp; ![string isEqualToString:@""])) {
if(regFieldOne.text = [regFieldOne.text substringToIndex:MAXLENGTH]){
return NO;
}
if(regFieldTwo.text = [regFieldTwo.text substringToIndex:MAXLENGTH]){
return NO;
}
}
return YES;
}
else {
return YES;
}
}
Комментарии:
1. Я только что попробовал это, и оно делает то же самое, что и мое.