UIView отображается в разделе UITableView, к которому он никогда не добавлялся при прокрутке - PullRequest
2 голосов
/ 04 декабря 2009

У меня есть UIView, который я добавляю в представление содержимого ячейки в определенном разделе (в частности, в разделе 1), как показано ниже:

[cell.contentView addSubview:self.overallCommentViewContainer];

Когда я быстро прокручиваю вверх / вниз - UIView появляется в Разделе 0 - хотя я никогда не добавлял UIView ни к одной из ячеек в Разделе 0.

Вот подробный взгляд на мой cellForRowAtIndexPath метод:

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

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:kCustomCellID];
    if (cell == nil)
    {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:kCustomCellID] autorelease];
    }

    // Configure the cell.
    switch(indexPath.section) {

        case 0: 
            // other code
            break;
        case 1:  

            // add the overall comment view container to the cell
            NLog(@"adding the overallCommentViewContainer");
            [cell.contentView addSubview:self.overallCommentViewContainer];
            NLog(@"creating the row at: Section %d, Row %d", indexPath.section, indexPath.row);
            break;
    }
    return cell;
}

1 Ответ

3 голосов
/ 04 декабря 2009

если в UITableView есть ячейки, готовые к повторному использованию, его метод dequeueReusableCellWithIdentifier с радостью вернет ячейку для секции 0, которая первоначально использовалась в секции 1! Я бы порекомендовал что-то подобное для вас, чтобы держать их отдельно:

UITableViewCell *cell;

// Configure the cell.
switch(indexPath.section) {

    case 0: 
        cell = [tableView dequeueReusableCellWithIdentifier:@"Section0Cell"];
        if (cell == nil) {
            cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"Section0Cell"] autorelease];
        }
        // other code
        break;
    case 1:  
        cell = [tableView dequeueReusableCellWithIdentifier:@"Section1Cell"];
        if (cell == nil) {
            cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"Section1Cell"] autorelease];
            // add the overall comment view container to the cell
            NLog(@"adding the overallCommentViewContainer");
            [cell.contentView addSubview:self.overallCommentViewContainer];
        }
        NLog(@"creating the row at: Section %d, Row %d", indexPath.section, indexPath.row);
        break;
}
return cell;

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

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