2013-07-08 3 views
0

Хотя есть несколько сообщений на сайте о повторении ячейки UITableview при прокрутке, я не мог найти решение, возможно, потому, что я довольно новичок в obj-c.UITableView помещает содержимое ячейки в неправильные строки после прокрутки

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 

    NSString *cellIdentifier = [NSString stringWithFormat:@"cell%d",indexPath.row]; 

    UILabel *firstlabel = nil; 
    UILabel *secondlabel = nil; 
    UILabel *thirdlabel = nil; 

    myTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:nil]; 
    if(!cell) { 
     cell = [[myTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil]; 
    } 

    if (noOfRows < [_eachrow count]-1) { 

    _eachcolumn = [_eachrow[noOfRows] componentsSeparatedByString:@"|"]; 
    firstlabel = [[UILabel alloc] initWithFrame:CGRectMake(0.0, 0, 142.0,tableView.rowHeight)]; 
    firstlabel.font = [UIFont fontWithName:@"Verdana" size:12]; 
    firstlabel.text = _eachcolumn[0]; 
    firstlabel.textAlignment = ALIGN_LEFT; 
    firstlabel.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | 
    UIViewAutoresizingFlexibleHeight; 
    [cell.contentView addSubview:firstlabel]; 

    secondlabel = [[UILabel alloc] initWithFrame:CGRectMake(142.0, 0, 50.0,tableView.rowHeight)]; 
    secondlabel.font = [UIFont fontWithName:@"Verdana" size:12]; 
    secondlabel.text = _eachcolumn[1]; 
    secondlabel.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | 
    UIViewAutoresizingFlexibleHeight; 
    [cell.contentView addSubview:secondlabel]; 

    thirdlabel = [[UILabel alloc] initWithFrame:CGRectMake(192.0, 0, 60.0,tableView.rowHeight)]; 
    thirdlabel.font = [UIFont fontWithName:@"Verdana" size:12]; 
    thirdlabel.text = _eachcolumn[2]; 
    thirdlabel.textAlignment = ALIGN_CENTER; 
    thirdlabel.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | 
    UIViewAutoresizingFlexibleHeight; 
    [cell.contentView addSubview:thirdlabel]; 

    noOfRows++; 
    return cell; 
    } 
    else return cell; 

} 

Итак, моя проблема в том, когда я прокрутку вверх или вниз, клетки продолжают помещены в неправильных строках без рисунка. Пожалуйста, помогите мне решить эту проблему. Заранее спасибо

+0

Это мне не понятно, почему вы добавляете свои метки в коде, как это. У вас есть пользовательская ячейка (myTableViewCell), почему бы не настроить метки в IB (если вы ее используете) или в методе init для ячейки? Кроме того, идентификатор ячейки должен быть константой, не отличающейся для каждой строки. – rdelmar

+0

количество строк неизвестно (они могут меняться для каждой даты) .. они являются динамическими ячейками .. Я создаю их программно .., мое приложение извлекает данные с php и отображает в uitableview для выбранной даты. Я не знал лучшего способа сделать это. Это прекрасно работает, за исключением того, что, когда я прокручиваю строки, очень сильно скрещиваются :( – kate

ответ

7

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

Попробуйте вместо этого:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 

    NSString *cellIdentifier = [NSString stringWithFormat:@"cell%d",indexPath.row]; 



    myTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 
    if(!cell) { 
     cell = [[myTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier]; 

    UILabel *firstlabel = nil; 
    UILabel *secondlabel = nil; 
    UILabel *thirdlabel = nil; 
    _eachcolumn = [_eachrow[noOfRows] componentsSeparatedByString:@"|"]; 
    firstlabel = [[UILabel alloc] initWithFrame:CGRectMake(0.0, 0, 142.0,tableView.rowHeight)]; 
    firstlabel.font = [UIFont fontWithName:@"Verdana" size:12]; 
    firstlabel.text = _eachcolumn[0]; 
    firstlabel.textAlignment = ALIGN_LEFT; 
    firstlabel.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | 
    UIViewAutoresizingFlexibleHeight; 
    firstlabel.tag = 10; 
    [cell.contentView addSubview:firstlabel]; 

    secondlabel = [[UILabel alloc] initWithFrame:CGRectMake(142.0, 0, 50.0,tableView.rowHeight)]; 
    secondlabel.font = [UIFont fontWithName:@"Verdana" size:12]; 
    secondlabel.text = _eachcolumn[1]; 
    secondlabel.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | 
    UIViewAutoresizingFlexibleHeight; 
    secondlabel.tag = 20; 
    [cell.contentView addSubview:secondlabel]; 

    thirdlabel = [[UILabel alloc] initWithFrame:CGRectMake(192.0, 0, 60.0,tableView.rowHeight)]; 
    thirdlabel.font = [UIFont fontWithName:@"Verdana" size:12]; 
    thirdlabel.text = _eachcolumn[2]; 
    thirdlabel.textAlignment = ALIGN_CENTER; 
    thirdlabel.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | 
    UIViewAutoresizingFlexibleHeight; 
    thirdlabel.tag = 30; 
    [cell.contentView addSubview:thirdlabel]; 


    return cell; 
    } 
    else 
    { 

    ((UILabel *)[cell.contentView viewWithTag:10]).text = _eachcolumn[1]; 
    ((UILabel *)[cell.contentView viewWithTag:20]).text = _eachcolumn[2]; 
    ((UILabel *)[cell.contentView viewWithTag:30]).text = _eachcolumn[3]; 

    return cell; 
    } 

}

+0

спасибо за ответ @ soryngod..but я все еще не смог его исправить..когда я использую ваш код, я получаю пустые строки, когда я прокрутка и если я изменяю идентификатор повторного использования в indexPath.row из nil, последняя строка повторяется, когда я прокручиваю ... какую идею, где я ошибаюсь? – kate

+0

см. отредактированный пост. – soryngod

+0

hey @ soryngod..i пробовал это .. все еще проблема сохраняется. Что может быть неправильным? Я действительно не понимаю ... Помогите пожалуйста. – kate

Смежные вопросы