将字符串数组添加到单元子视图中的标签

时间:2014-06-09 17:14:50

标签: ios ios7 uitableview uiview uilabel

我有一个单元格,它有一个自定义UIView子类作为其contentView子视图之一。子类将用作标记列表。

在单元格创建方法中,我完成以下对子类的调用:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
[searchResultCell.categoriesView createLabelsForArray:newCats];

调用以下方法:

-(void)createLabelsForArray:(NSArray *)labelArray {
    NSLog(@"%s",__PRETTY_FUNCTION__);

    for (NSString *labelTextString in labelArray) {
        NSLog(@"label string : %@",labelTextString);

        NSDictionary *attributesDictionary = [NSDictionary dictionaryWithObjectsAndKeys:
                                             [UIFont systemFontOfSize:12], NSFontAttributeName,
                                             nil];

        CGRect frame = [labelTextString boundingRectWithSize:CGSizeMake(128, 15)
                                                options:NSStringDrawingTruncatesLastVisibleLine
                                             attributes:attributesDictionary
                                                context:nil];
        CGSize size = frame.size;
        UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, size.width, size.height)];
        label.textColor = [UIColor blueColor];
        label.text = labelTextString;
            NSLog(@"label frame: %@",NSStringFromCGRect(label.frame));
        [self addSubview:label];
    }

    NSLog(@"self frame: %@",NSStringFromCGRect(self.frame));

这是发生的事情: enter image description here

虽然这是我想要实现的目标: enter image description here

1 个答案:

答案 0 :(得分:0)

您正在初始化每个新创建的标签,其框架来源为(0,0)。这意味着您添加到categoriesView的每个标签都将相互添加。每次添加新标签时,您都需要通过当前标签的x增加后续标签的width位置。

其次,由于在-createLabelsForArray:内调用了-tableView:cellForRowAtIndexPath:,因此如果searchResultsCell.categoriesView每次都不是新视图,则每次调用此方法时都会添加新的重复标签调用cellForRowAtIndexPath。您可能想要在再次添加标签之前检查标签是否已添加,或者在添加新标签之前至少删除旧标签。