данные в строке таблицы появляются и исчезают при прокрутке вверх (или) прокрутки вниз - PullRequest
1 голос
/ 26 мая 2011

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

This screen shot

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

как и в следующем коде я проектирую ячейку таблицы, где 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: ";


            } 
}
}

Ответы [ 3 ]

1 голос
/ 26 мая 2011

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

0 голосов
/ 26 мая 2011

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

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

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

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

0 голосов
/ 26 мая 2011
  cell = [[[CustomCellStudentData alloc] initWithFrame:CGRectZero reuseIdentifier:nil] autorelease];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...