Iphone 左&x2B;UITableView单元格中的右对齐文本,在滚动表格时中断

Iphone 左&x2B;UITableView单元格中的右对齐文本,在滚动表格时中断,iphone,objective-c,uitableview,Iphone,Objective C,Uitableview,我的目标是在同一单元格中显示两个字符串,一个左对齐,另一个右对齐。我附带的代码在表视图中就是这样做的,但是当你向上/向下滚动时,它就会中断。我需要这个工作在一个表,可以滚动。有人提到用CustomUITableViewCells代替我目前的方法,有人能给我举个例子吗 // Customize the appearance of table view cells. - (UITableViewCell *)tableView:(UITableView *)tableView cellFor

我的目标是在同一单元格中显示两个字符串,一个左对齐,另一个右对齐。我附带的代码在表视图中就是这样做的,但是当你向上/向下滚动时,它就会中断。我需要这个工作在一个表,可以滚动。有人提到用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中有大量行,这将非常有用

    浏览以了解如何使用2个标签对
    UITableViewCell
    进行子类化

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

  • 在加载
    表视图时,请记住引用此
    customUITableViewCell
    ,而不是默认的uitableviewcell。您的
    ui标签将不再混乱


    .

    我会使用自定义的
    UITableViewCell
    。最简单的方法是下载一个示例项目,然后复制并粘贴以查看如何设置自定义单元格。一个很好的教程,包括一个示例项目。您可以在
    cellforrowatinexpath
    方法中使用
    if(indexPath.row==int)
    来确定哪些单元格应该是标准单元格,哪些应该是您的自定义单元格,我粘贴了与您发布的代码相同的代码,我收到了2个编译器错误,其中提到了在UILable的分配中缺少,并且我已经清除了它,它被编译并成功启动

    由于datasource方法,我遇到的唯一异常和崩溃是不返回任何单元格。这在给定的代码中也是缺失的

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


    所以,只需再次验证您的代码,否则array提供的数据源可能会出现另一个问题,同时还要检查第节中的行数。

    Legolas,非常感谢您的帮助。使用一个子类UITableViewCell,我可以让所有东西都按我的意愿工作,这也大大简化了我的设计。你提供给iPhoneNoob教程的链接真的帮助我点击它。