iphone – 在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作为标签,它不会导致类似您现在面临的问题,但您不能添加多个标签.

你有两个解决方案.

>在您的情况下,您需要停止为每个单元格使用相同的cellIdentifier,并为每个单元格使用不同的标识符,以便它们不会被重用.如果tableView中的行数非常少,那么这将会很有用,否则会导致效率低下.
>更好的解决方案是将UITableViewCell子类化并在其代码中添加这两个标签,然后将该UITableViewCell与dequeueReusableCellWithIdentifier一起使用.这只是一小部分工作,您可以重复使用单元格.如果您的tableview中有大量行,这将非常有用.

通过THIS TUTORIAL了解如何使用2个标签继承UITableViewCell.

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

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

Another reference.

点赞