данные в строке таблицы появляются и исчезают, когда мы прокручиваем страницу вверх (или) прокручиваем страницу вниз

#iphone #objective-c #uitableview

#iPhone #objective-c #uitableview

Вопрос:

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

Этот снимок экрана

Заранее спасибо.

как и в следующем коде, я создаю ячейку таблицы, где CustomCellStudentData находится класс, я создаю фреймы типа ярлыков, фреймы текстового поля

 - (UITableViewCell *)tableView:(UITableView *)tableView 
         cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";

    CustomCellStudentData *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) {

        cell = [[[CustomCellStudentData alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];

    }

    switch(indexPath.section)
    {



        case 0:
            switch (indexPath.row) 
        {
            case 0:
            {

                tfText[0] = [[UITextField alloc] initWithFrame:CGRectMake(100,10, 200, 40)];
                cell.accessoryView = tfText[0];
                tfText[0].delegate=self;
                tfText[0].placeholder =@"<Student Name>";

                cell.primaryLabel.text =@"Student Name: ";

            } 
                break;
            case 1: 
            {
                tfText[1] = [[UITextField alloc] initWithFrame:CGRectMake(100,10, 200, 40)];
                cell.accessoryView = tfText[1];
                tfText[1].delegate=self;
                tfText[1].placeholder =@"<Student Age>";

                cell.primaryLabel.text =@"Student Age: ";


            } 
}
}
  

Ответ №1:

UITableView повторно использует ячейки, чтобы не забивать память. Как только две ячейки поднимаются вверх, они попадают в пул повторно используемых ячеек. Если пул не пуст, dequeueReusableCellWithIdentifier: возвращает ячейку из этого пула (здесь есть зависимость от идентификатора). Поскольку для просмотра таблицы требуются ячейки для новых прокручиваемых строк, она получает ячейки из пула и предоставляет их вам для перенастройки. Итак, текстовое поле, которое вы прикрепили к ячейке при настройке его для строк 0 и 1, все еще остается, если вы явно не удалите. Поскольку мы не знаем, какие ячейки мы собираемся получить, мы должны сбросить все настройки, которые мы делаем, и настроить ее как новую ячейку. В этом случае, независимо от того, какая ячейка поступает, сначала вам следует удалить текстовое поле как вспомогательный вид.

Ответ №2:

   cell = [[[CustomCellStudentData alloc] initWithFrame:CGRectZero reuseIdentifier:nil] autorelease];
  

Ответ №3:

То, что сказал Дипак, верно. Добавляю к его ответу, в будущем, если вы добавите какой-либо подвид в представление ячейки. Удалите из ячейки, прежде чем добавлять в нее что-либо. Используйте

 for(UIView * view in cell.contentView.subviews){
      [view removeFromSuperview]; view = nil;
}
  

перед настройкой ячейки.

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