Текст в UITableViewCell отсутствует при прокрутке вниз - PullRequest
0 голосов
/ 16 сентября 2009

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

Вот часть моих кодов:

-(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{...} }

Ответы [ 3 ]

3 голосов
/ 16 сентября 2009

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

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

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

1 голос
/ 14 апреля 2011

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

- (void)textFieldDidEndEditing:(UITextField *)textField 

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

1 голос
/ 16 сентября 2009

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

[self CreateTextField];

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

- (BOOL)resignFirstResponder

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...