多次点击时表格视图单元格文本与其他文本重叠

Posted

技术标签:

【中文标题】多次点击时表格视图单元格文本与其他文本重叠【英文标题】:Table view cell text overlaps others when tapped multiple times 【发布时间】:2011-11-08 10:15:48 【问题描述】:

我创建了一个 Youtube 视频列表,但存在一些问题:

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

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) 
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    

    NSString *url = [selectedCellItem.content objectAtIndex:indexPath.row];

    UIWebView *wbView = [[UIWebView alloc]initWithFrame:CGRectMake(0, 0, ROW_HEIGHT, ROW_HEIGHT)];
    wbView.tag = 1;
    [cell.contentView addSubview:wbView];
    [wbView release];

    NSString *embedhtml = @"\
    <html><head>\
    <style type=\"text/css\">\
    body \
    background-color: transparent;\
    color: white;\
    \
    </style>\
    </head><body style=\"margin:0\">\
    <embed id=\"yt\" src=\"%@\" type=\"application/x-shockwave-flash\" \
    width=\"%0.0f\" height=\"%0.0f\"></embed>\
    </body></html>";

    NSString *html = [NSString stringWithFormat:embedHTML,url, ROW_HEIGHT, ROW_HEIGHT];
    UIWebView *thisVideoView = (UIWebView *)[cell.contentView viewWithTag:1];  
    thisVideoView.delegate = self;
    [thisVideoView loadHTMLString:html baseURL:nil];

    CGFloat cellWidth = [UIScreen mainScreen].bounds.size.width-ROW_HEIGHT-5;
    NSString *cellValue = [selectedCellItem.title objectAtIndex:indexPath.row];
    CGRect labelFrame = CGRectMake(ROW_HEIGHT+5, 0.0, cellWidth, ROW_HEIGHT);
    UILabel *titleLabel = [[UILabel alloc] initWithFrame:labelFrame];

    titleLabel.tag = 2;
    titleLabel.text = cellValue;
    titleLabel.font = [UIFont systemFontOfSize:14.0];
    [titleLabel setNumberOfLines:10];
    [cell.contentView addSubview:titleLabel];
    [titleLabel release];

    return cell;

一开始,我的应用运行良好。但是,当我多次单击一个单元格时,标签开始与其他单元格标签重叠。我该如何解决这个问题?

【问题讨论】:

如果问题解决了,您应该检查您的问题是否已解决,并选择一个答案来帮助将来遇到同样问题的人:) 【参考方案1】:

发生这种情况是因为您在每次调用该函数时都创建了 titleLabel。请记住,滚动表格视图时会重复使用单元格,因此基本上每次使用单元格时,您都会重新创建 titleLabel 而不会删除旧的

【讨论】:

感谢您的回复。但是我应该怎么做才能解决这个问题? 我会在 if (cell == nil) 块中移动 *titleLabel 的创建。这样,您就可以在需要时创建它。稍后您可以通过分配给它的标签来检索它:) 我已经尝试过了,但是......现在整个项目的顺序变得混乱......而且非常随机......每次我滚动表格视图时它都会返回不同的标签......怎么了?或者我应该只移动 UILabel *titleLabel = [[UILabel alloc] initWithFrame:labelFrame];进入 if 块? 如果移动 NSString *cellValue = [selectedCellItem.title objectAtIndex:indexPath.row];在 if 中,所有内容都混淆是正常的,因为您仅在需要创建单元格时才分配单元格的内容。我只会移动 UILabel *titleLabel = [[UILabel alloc] initWithFrame:labelFrame];进入 if 块 说真的,如果您不将其标记为已解决,这将被标记为“未解决”问题:(【参考方案2】:

尝试设置cell.clipsToBounds = YES

【讨论】:

以上是关于多次点击时表格视图单元格文本与其他文本重叠的主要内容,如果未能解决你的问题,请参考以下文章

文本在表格单元格中重叠自身 SWIFT

表视图出列可重用单元格重叠

如何从表格视图中的单元格点击图像视图

自定义表格视图单元格中的 UITextField。点击单元格/文本字段时显示选择器视图

在表格视图单元格按钮上查看表格视图单元格文本

选择其中一个时更改其他表格视图单元格的数据