如何在tableview中更新多个UILabel

时间:2011-09-09 14:11:15

标签: iphone objective-c ios cocoa-touch

我的问题需要一些帮助。我见过很多类似的帖子,并尝试过解决方案,但没有一个对我有用。

我有一个自定义UITableViewCell,其中我有多个UILabel和一个UIButton控件。此控件用于更新其单元格中的一个标签。但是,它不会更新正确的UILabel,而是更新最后一个单元格中的UILabel

我的代码:

- (UITableViewCell *)tableView:(UITableView *)inTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
  static NSInteger ETag = 111;
  static NSInteger STag = 112;

  .... // code

  if (cell == nil) {

  .... // code

   frame.origin.x = 85;
    frame.origin.y = 10;
    frame.size.height = 50;
    frame.size.width = 100;

    SLabel = [[UILabel alloc] initWithFrame:frame];
    SLabel.tag = STag;
    [cell.backgroundView addSubview:SLabel];
    //[SLabel release];

    frame.origin.x = 215;
    frame.origin.y = 10;
    frame.size.height = 50;
    frame.size.width = 100;

    ELabel = [[UILabel alloc] initWithFrame:frame];
    ELabel.tag = ETag;
    [cell.backgroundView addSubview:ELabel];
    //[ELabel release];

   .... // code

   }

   .... // code

    ELabel = (UILabel *) [cell.backgroundView viewWithTag:ETag];
    SLabel = (UILabel *) [cell.backgroundView viewWithTag:STag];

    ELabel.text = [s._episode stringValue];
    ELabel.backgroundColor = [UIColor clearColor];
    ELabel.textColor = [UIColor whiteColor];
    ELabel.font = [UIFont fontWithName:@"Helvetica-Bold" size:20];
    ELabel.textAlignment = UITextAlignmentLeft;
    ELabel.tag = 1000+indexPath.row;

    SLabel.text = [s._season stringValue];
    SLabel.backgroundColor = [UIColor clearColor];
    SLabel.textColor = [UIColor whiteColor];
    SLabel.font = [UIFont fontWithName:@"Helvetica-Bold" size:20];
    SLabel.textAlignment = UITextAlignmentLeft;
    SLabel.tag = 1000+indexPath.row;
    ..... // code

    return cell;
    }

感谢您的阅读和帮助。

托米

谢谢!我解决了我的问题:

 UITableViewCell *cell = (UITableViewCell *)[tableView cellForRowAtIndexPath:indexPath];            
 UILabel *a = (UILabel *) [cell viewWithTag:(1000+indexPath.row)]; 
 a.text = [NSString stringWithFormat:@"%@", @"something"]; 

问题是标签不是唯一的

4 个答案:

答案 0 :(得分:2)

如果您的UILabel中的tag在您的视图中是唯一的,则可以访问该UITableView。 例如,您有UILabel个多个单元格。每个单元格包含可能已更新的indexPath.row。让我们为这些标签设置唯一标记,让它们成为UITableViewCell的{​​{1}}(已经在您的代码中完成)。

然后,当您想要使用tag == cellsTagToUpdate更新某个单元格时,您应该通过调用UITableView *tableViewUILabel *labelToUpdate = [tableView viewWithTag:cellsTagToUpdate]来获取对该单元格的引用。

现在您已经引用了要更新的标签。在更新之前,您应该检查cell是否为零。如果该视图(UILabel)现在不可见并且已从superview中移除,则为零。

答案 1 :(得分:0)

嗯,您始终可以使用UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];获取对您单元格的引用,然后使用viewWithTag获取单元格内的UILabel并设置所需标签的文本。

答案 2 :(得分:0)

您要做的第一件事是从indexPath UITableViewDelegate选择器获取tableView: didSelectRowAtIndexPath:并以某种方式存储它(属性就足够了)。

然后在您的按钮选择器中可以调用cellForRowAtIndexPath:对于与所选indexPath相对应的单元格,以便更新其UILabel的任何文本,现在:

ELabel = (UILabel *) [cell.backgroundView viewWithTag:ETag];
SLabel = (UILabel *) [cell.backgroundView viewWithTag:STag];

答案 3 :(得分:-2)

编辑:见Nektos回答

然而,他布局和设置数据的方式不是你应该怎么做的。他可以通过IB进行布局并应用标准模式:http://developer.apple.com/library/ios/#documentation/UserExperience/Conceptual/TableView_iPhone/CreateConfigureTableView/CreateConfigureTableView.html#//apple_ref/doc/uid/TP40007451-CH6-SW10