在cellForRowatIndexPath中的每个自定义单元格中创建一个Label

时间:2014-11-12 07:41:45

标签: ios uitableview uilabel

我正在尝试在每个customCell中创建一个标签。在cellForRowIndexPath中,我有:

编辑:

static NSString *checkInTableIdendifier = @"ChatCell";

cell = (ChatTableViewCell *)[tableView dequeueReusableCellWithIdentifier:checkInTableIdendifier];

if (cell == nil){
    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"ChatTableViewCell" owner:self options:nil];
    cell = [nib objectAtIndex:0];
}

NSAttributedString *title;
title = [[NSAttributedString alloc] initWithString:[self.savedMsgs objectAtIndex:indexPath.row] attributes:@{ NSFontAttributeName : [UIFont fontWithName:@"Noteworthy-Bold" size:12], NSUnderlineStyleAttributeName : @1 , NSStrokeColorAttributeName : [UIColor blackColor]}]; //1
UILabel *label;
label = [[UILabel alloc] initWithFrame:CGRectMake( (self.view.bounds.size.width - title.size.width) / 2.0f, 40.0f, title.size.width, title.size.height)]; //2
label.attributedText = title; //3
[cell addSubview:label]; //4

由于第2行,标签将全部以相互重叠的相同点结束。如何根据每个相应的单元格表示生成的标签的来源?

2 个答案:

答案 0 :(得分:1)

您应该使用单元格的边界,而不是self.view来定位标签。小心,因为在创建单元格后框架可能会更改,因此建议使用自动布局以确保标签始终位于您希望它相对于单元格的位置。

另外,请记住,单元格会被重复使用,在这种情况下,您可能会多次添加标签。

要缓解这两个问题,请将单元格子类化并在随附的xib中进行设计。

答案 1 :(得分:1)

用于生成单元格的方法,' dequeueReusableCellWithIdentifier'可以返回之前已经使用过的单元格。获取单元格后添加标签等时,您将在已存在的标签上添加标签。

处理单元重用的最简单方法是创建UITableViewCell子类和关联的xib。创建此ViewController并且可以访问tableView(通常是viewDidLoad)将单元格的nib注册到tableView。然后,当您将单元格出列时,只需要在已存在的标签上设置文本值。

除此之外,UITableView有一个更新的更好的方法,用于使单元格出列,它采用索引路径并始终返回一个单元格,因此您不需要检查它。如果你不需要支持iOS 6,我会改用它。