【问题标题】:Add array of strings to a Labels within a cell subview将字符串数组添加到单元格子视图中的标签
【发布时间】:2014-07-30 07:01:18
【问题描述】:

我有一个单元格,它有一个自定义 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));

这是正在发生的事情:

虽然这是我想要实现的目标:

【问题讨论】:

  • 嗨@StuartM,当您记录各个标签帧时,您看到了什么?为什么要把它们都放在 {0,0} 点上?

标签: ios ios7 uitableview uiview uilabel


【解决方案1】:

您正在初始化每个新创建的标签,其框架原点为(0,0)。这意味着您添加到 categoriesView 的每个标签都将被添加到彼此之上。每次添加新标签时,都需要将后续标签的 x 位置增加当前标签的 width

其次,由于-createLabelsForArray: 是在-tableView:cellForRowAtIndexPath: 中调用的,如果每次调用cellForRowAtIndexPathsearchResultsCell.categoriesView 都不是新视图,那么每当调用此方法时,您最终都会添加新的重复标签。您可能想在再次添加之前检查标签是否已经添加,或者至少在添加新标签之前删除旧标签。

【讨论】:

  • 谢谢,这确实有道理。将宽度存储在 for 循环中并重用的最佳方法是什么,至于第一个对象我需要 0,0 然后我需要为其他对象存储?有没有一种简单的方法可以每次都清理 cellForRow... 中的持有者视图?
猜你喜欢
  • 1970-01-01
  • 2012-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-30
  • 1970-01-01
相关资源
最近更新 更多