UIView 显示在 UITableView 部分中,它在滚动时从未添加到

Posted

技术标签:

【中文标题】UIView 显示在 UITableView 部分中,它在滚动时从未添加到【英文标题】:UIView showing up in a UITableView section it was never added to when scrolling 【发布时间】:2009-12-04 17:43:14 【问题描述】:

我有一个 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】:

如果 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;

关键是为您正在使用的每种类型的单元格使用不同的标识符字符串,该字符串不能与表格中的其他单元格互换。

【讨论】:

效果很好 - 现在一切都在原处!谢谢!

以上是关于UIView 显示在 UITableView 部分中,它在滚动时从未添加到的主要内容,如果未能解决你的问题,请参考以下文章

UITableView 部分标题内的下拉 UIView

UITableView 标题部分的高度不会为自定义 UIView() 类自动调整

如何自定义 UITableView 中部分的 UIView?

如何从 ViewController 中的 xib (nib) 实例化 UIView / UITableView

尝试使用 Swift 在 UITableView 中的部分标题的 UIView 中设置 UILabel 的文本

从 XIB 加载的 UITableView Sectionheader 有时显示不正确