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

时间:2011-08-06 03:01:17

标签: iphone objective-c 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

3 个答案:

答案 0 :(得分:2)

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

你有两个解决方案。

  1. 在您的情况下,您需要停止为每个单元使用相同的cellIdentifier,并为每个单元使用不同的标识符,以便它们不会被重用。如果tableView中的行数非常少,或者结果效率很低,这会很有用。

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

    浏览THIS TUTORIAL,了解如何使用2个标签继承UITableViewCell

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

  3. 请记住在加载customUITableViewCell时引用此tableView而不是默认的uitableviewcell。你的UILabels不会再搞砸了。

    Another reference

答案 1 :(得分:0)

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

答案 2 :(得分:0)

好吧,我已经粘贴了你发布的相同代码,并且我在UILable的分配中遗漏了2个编译错误,提到了,并且我已经清除了它,编译并启动了成功。

我遇到的唯一例外和崩溃是由于数据源方法没有返回任何单元格。在给定的代码中也缺少这一点。

除此之外,即使我多次滚动,代码也能在我的最终完成并且没有一次崩溃。

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