表格单元格中的文本混合在一起

Posted

技术标签:

【中文标题】表格单元格中的文本混合在一起【英文标题】:Text in table cells is mixing 【发布时间】:2017-10-21 13:07:53 【问题描述】:

我有表格视图。当我滚动我的表格视图时,表格单元格中的文本标签正在混合。如何解决?

我的代码:

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

static NSString *cellIdentifier = @"Cell3";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];

if (cell == nil) 
    cell= [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier];



    UILabel *label = (UILabel *)[self.view viewWithTag:1];

    if (indexPath.section == 0) 
        switch (indexPath.row) 
            case 0:
                label.text = [_array objectAtIndex:indexPath.row];
                break;
            case 1:
                label.text = [_array objectAtIndex:indexPath.row];
                break;
            case 2:
                label.text = [_array objectAtIndex:indexPath.row];
                break;


        

【问题讨论】:

缺少信息:我猜你有超过 3 个单元格,如果if (indexPath.section != 0 && indexPath.row >2) label.text = nil; 应该这样做? @Larme 我有超过 3 个单元格和超过 1 个部分 创建一个标签并将其添加到单元格的 contentView 将解决您的问题。 @Amit 我在情节提要中创建标签 如果您在情节提要的单元格中有标签,那么您为什么要分配它,为什么不将标签称为 cell.myLbl 【参考方案1】:

您没有在单元格上设置要标记的文本,因为self.view 有许多带有标签 1 的视图。(视图中的任何单元格都有这样的视图)。 要将文本设置到单元格中,您应该使用单元格的子视图之一(textLabeldetailTextLabel 或一些自定义标签),例如:

<...>
cell.textLabel.text = "Hello";
<...>

我认为,我们需要为您添加一些解释。 方法-(UIView*)viewWithTag: 在子视图树中找到(在位于父视图上的所有视图中)。 tag 只是一个数字,仅此而已,子视图树中的一个视图可以具有相同的标签。当 tableView 找不到要重用的单元格(dequeueReusableCellWithIdentifier:返回 nil)时,您会创建不位于表格上的新单元格(单元格的父视图为 nil),因此第一次您找不到标签标签 1. 在第二次和其他时候,您会在 tableView 上获得其中一个标签(不是单元格的子视图,而是其他单元格的子视图)。

关于好的阶梯和标签 有时标签是一种非常有用的机制,可以让我们的生活变得轻松,例如,如果您有动态的按钮数组,那么将它们设置为相同的选择器和目标以及与数组中的索引相同的标签并确定哪个按钮被选中是非常有用的标记属性。 但是标签对于查找子视图并不是那么有用,因为您应该知道一些奇怪的数字,并且应该将返回的 UIView* 的类型转换为所需的类型。我不认为这很好。第二个原因,您有 2 个不同的地方应该设置相同的值。第三个原因是数据冲突的领域,你可以为不同的视图设置相同的标签,然后你会得到错误的结果,而且很难发现错误。

【讨论】:

我需要在情节提要中创建标签。在这种情况下我不能使用cell.textLabel.text = "Hello"; 您可以使用 UITableViewCell 的自定义子类并向其添加带有 IBOutlet 修饰符的属性,该修饰符将包含对您的标签的引用。 好的。还有其他方法吗? 为什么需要其他方式? 也可以替换 (UILabel *)[self.view viewWithTag:1]; with (UILabel *)[cell.contentView viewWithTag:1];这将解决问题。但这是一个糟糕的样式代码

以上是关于表格单元格中的文本混合在一起的主要内容,如果未能解决你的问题,请参考以下文章

表格视图单元格中的文本字段

表格单元格中的旋转文本呈现在单元格上方而不是其中

将文本字段数据保存在 xcode 中的可扩展表格单元格中

表格单元格中的CSS文本溢出?

如何在编辑表格视图单元格中的文本字段时重新加载所有表格视图单元格 - iOS Swift

移动到表格单元格中的下一个文本字段