Текст в UITableViewCell отсутствует при прокрутке вниз

StackOverflow https://stackoverflow.com/questions/1432143

  •  07-07-2019
  •  | 
  •  

Вопрос

Я добавил несколько ячеек в табличное представление, и у каждой ячейки есть текстовое поле, которое позволяет пользователям вводить тексты. Я обнаружил, что когда я прокручиваю вниз и возвращаюсь, ввод первых нескольких строк исчезнет. Кто-нибудь знает в чем проблема?

Ниже приведен фрагмент моих кодов:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath
    *)indexPath
        {
            //init cell
            static NSString *TableIdentifier = @"MyIdentifier";
            UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:TableIdentifier];
            if(cell == nil) {
                cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero 
                                        reuseIdentifier:TableIdentifier] autorelease];
            }

            //set cell for each row
            if([indexPath row] == 0)
            {
                cell.textLabel.text = @"Row A";
                txt_A = [self CreateTextField];         //create textField
                [cell.contentView addSubview:txt_A];        //add textField to cell
            }
            else if([indexPath row] == 1)
            {
                cell.textLabel.text = @"Row B";
                    txt_B = [self CreateTextField];
                    [cell.contentView addSubview:txt_B];
            }
            else{...} }
Это было полезно?

Решение

Вы имеете в виду, что пользовательский ввод исчезнет? Если это так, вероятно, это потому, что cellForRowAtIndexPath: повторно использует ячейку и снова выполнит [self CreateTextField] .

Таким образом, если вы не сохраните пользовательский ввод до исчезновения ячейки, ваши ячейки будут перерисованы пустыми и повторно инициализированы пустыми.

Если вы сохраняете пользовательский ввод, вы можете повторно инициализировать ячейку с помощью правильного пользовательского ввода.

Другие советы

Я считаю, что когда ячейка покидает экран (из-за прокрутки), iPhone сразу же освобождает ее для экономии памяти (таким образом, теряя пользовательский ввод). Теперь, когда вы прокручиваете назад вверх, он создает новую ячейку с новым UITextField в старой позиции с

[self CreateTextField];

Вы должны хранить ввод пользователя для каждого текстового поля отдельно. Например, вы можете стать делегатом текстового поля и поймать

- (BOOL)resignFirstResponder

чтобы получать уведомления, когда пользователь покидает фокус текстового поля. На данный момент вы можете предположить, что пользователь закончил с этим конкретным полем и сохранить его.

Вы можете использовать метод для сохранения пользовательских данных:

- (void)textFieldDidEndEditing:(UITextField *)textField 

Этот метод вызывает пользовательский конец, редактирующий поле. Например, сохраните пользовательский ввод в массив.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top