UITableView单元格中的左+右对齐文本,在表格滚动时中断



我的目标是在同一个单元格中显示2个字符串,其中一个左对齐,另一个右对齐。我所附的代码只是在表视图,但它打破了,当你向上/向下滚动。我需要这个工作在一个表,可以滚动。有人提到使用CustomUITableViewCells而不是我目前的方法,有人能指出我的例子吗?

// Customize the appearance of table view cells.
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
        static NSString *CellIdentifier = @"Cell";
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if (cell == nil) {
            cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
            UILabel *rank = [[UILabel alloc] initWithFrame:CGRectMake(5, 5, 100, 20];
            [rank setTag:5];
            [cell.contentView addSubview:rank];
            [rank release];
            UILabel *item = [[UILabel alloc] initWithFrame:CGRectMake(110, 5, 220, 20];
            [item setTextAlignment:UITextAlignmentRight];
            [item setTag:6];
            [cell.contentView addSubview:item];
            [item release];
        }
        UILabel *rank = (UILabel *)[cell viewWithTag:5];
        UILabel *item = (UILabel *)[cell viewWithTag:6];
        rank.text = @"leftside";
        item.text = @"rightside";
    }
Any ideas and thoughts greatly appricated, thanks for lookin

这个问题是由于dequeueReusableCellWithIdentifier。当单元格被重用时,当您上下滚动时,它将导致主要问题,因为标签被添加为单元格和的子视图,它们不具有单元格的属性。但是,如果您使用cell.textLabel作为您的标签,它不会引起像您现在面临的问题,但是您不能添加多个标签。

你有两个解决方案。

  1. 在您的情况下,您需要停止为每个细胞使用相同的cellIdentifier,并为每个细胞使用不同的标识符,以便它们不会被重用。如果您在tableView中有非常少的行,这将是有用的,否则它将被证明是低效的。

  2. 一个更好的解决方案是子类 UITableViewCell并在其代码中添加这两个标签,然后使用该UITableViewCell与dequeueReusableCellWithIdentifier。这只是一小部分工作,你可以重复使用细胞。如果你的tableview中有大量的行,这将非常有用。

    通过本教程学习如何用2个标签子类UITableViewCell

    您需要使用- (void)layoutSubviews方法并将这些标签添加到您的自定义UITableViewCell子类中。

记住引用这个customUITableViewCell而不是默认的uitableviewcell当你加载tableView。你的UILabels不会再乱了。

另一个参考

嗯,我粘贴了你发布的相同代码,我得到了2个编译器错误,提到)在available的分配中缺失,因为我已经清除了它,它编译并成功启动。

我所面临的唯一例外和崩溃,这是由于数据源方法不返回任何单元格。这在给定的代码中也是缺失的。

除此之外,代码在我这端工作得很好,即使我滚动了很多次也没有崩溃。

因此,只需再次验证您的代码,否则应该有另一个问题,关于数组提供的数据源,并检查section中的行数

我将使用自定义的UITableViewCell。最简单的方法是下载一个示例项目,然后复制和粘贴,以了解如何设置自定义单元格。这是一个很好的教程,包含了一个示例项目。您可以在cellForRowAtIndexPath方法中使用if (indexPath.row == int)来确定哪些单元格应该是标准单元格,哪些应该是您的自定义单元格。

最新更新