Текстовое поле: должно изменять набор символов:replacementString: возвращать ловушку!

#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. Я только что попробовал это, и оно делает то же самое, что и мое.