如何使用 2 个不同颜色的标签制作 UITableViewCell?

Posted

技术标签:

【中文标题】如何使用 2 个不同颜色的标签制作 UITableViewCell?【英文标题】:How to make UITableViewCell with 2 labels of different color? 【发布时间】:2011-10-19 08:38:48 【问题描述】:

我想要这样的 UITableViewCell:

“电话:”的文字颜色必须与号码的文字颜色不同。现在我像往常一样将文本设置为单元格:

cell.textLabel.text=@"Something";

是否可以有 1 个标签并更改其中某些部分的颜色?

如何使表格单元格像我的图片一样?

谢谢。

【问题讨论】:

你总是可以继承 UITableViewCell 和两个 UILabel。 【参考方案1】:

你应该在单元格中取两个标签...并在 UITableViewCell 的子视图中添加这两个标签

在 cellForRowAtIndexPath 方法中写入。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 


    static NSString *CellIdentifier = @"Cell";  
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil)
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];

    for(UIView *eachView in [cell subviews])
        [eachView removeFromSuperview];

    //Initialize Label
    UILabel *lbl1 = [[UILabel alloc]initWithFrame:YOURFRAME];
    [lbl1 setFont:[UIFont fontWithName:@"FontName" size:12.0]];
    [lbl1 setTextColor:[UIColor grayColor]];
    lbl1.text = YOUR CELL TEXT;
    [cell addSubview:lbl1];
    [lbl1 release];

    UILabel *lbl2 = [[UILabel alloc]initWithFrame:YOURFRAME];
    [lbl2 setFont:[UIFont fontWithName:@"FontName" size:12.0]];
    [lbl2 setTextColor:[UIColor blackColor]];
    lbl2.text = YOUR CELL TEXT;
    [cel2 addSubview:lbl2];
    [lbl2 release];

    return cell;

更新:

除此之外,您还可以创建自定义单元格定义为here

快乐编码..

【讨论】:

for(UIView *eachView in [cell subviews])[eachView removeFromSuperview]; 太棒了。为此 +1 for(UIView *eachView in [cell subviews].copy) 更安全。另一种形式崩溃(或用于在以前的 Cocoa 中崩溃)。【参考方案2】:

许多人使用将标签添加为单元格子视图的技术,并且可能会在重用单元格时遇到意想不到的结果。 Apple 已经提供了可以在各个方面进行自定义的模板。 在你的情况下,不使用自定义单元格,不添加标签,我会使用模板UITableViewCellStyleValue2,你可以使用现有的标签和附件视图,比如cell.textLabelcell.detailTextLabelcell.accessoryView,看这个sn- p 或多或少地模拟了你的界面:

- (UITableViewCell *)tableView:(UITableView *)tableView 
                     cellForRowAtIndexPath:(NSIndexPath *)indexPath

    static NSString *CellID = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellID];
    if (cell == nil) 
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue2 
        reuseIdentifier:CellIdentifier] autorelease];
    

        cell.textLabel.contentMode=UIViewContentModeScaleToFill;
        cell.textLabel.lineBreakMode = UILineBreakModeWordWrap;
        cell.textLabel.baselineAdjustment=UIBaselineAdjustmentAlignCenters;
        cell.textLabel.textAlignment=UITextAlignmentCenter;
        cell.textLabel.font=[UIFont boldSystemFontOfSize:22];
        cell.textLabel.textColor=[UIColor lightGrayColor];

        cell.detailTextLabel.contentMode=UIViewContentModeScaleToFill;
        cell.detailTextLabel.lineBreakMode = UILineBreakModeWordWrap;
        cell.detailTextLabel.baselineAdjustment=UIBaselineAdjustmentAlignCenters;
        cell.detailTextLabel.textAlignment=UITextAlignmentLeft;
        cell.detailTextLabel.font=[UIFont boldSystemFontOfSize:23];
        cell.detailTextLabel.textColor=[UIColor blackColor];

        cell.textLabel.text=@"Tel.:";
        cell.detailTextLabel.text=@"+3912345678";

        UIImageView *imageView = [[UIImageView alloc] initWithImage:
                                  [UIImage imageNamed:@"phone.png"]];
        cell.accessoryView = imageView;
        [imageView release];
        return cell;

希望这会有所帮助。

【讨论】:

【参考方案3】:

唯一的方法是将新标签添加为具有不同颜色作为背景的子视图。

【讨论】:

【参考方案4】:

要么使用自定义单元格并根据要求进行初始化,要么您可以使用 UITableviewCell 并根据需要的格式添加多个 UILabel。

例如……,

static NSString *MyIdentifier =@"MyIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];

if (cell == nil) 
       
    cell = [[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:MyIdentifier];     


UILabel *lblPhone = [[UILabel alloc] initwithFrame:CGRectMake(5, 5, 150, 30)];
lblPhone.text = @"Tel.";
[cell addSubView: lblPhone];

【讨论】:

您不应该真正将子视图添加到单元格,而是添加到单元格的内容视图,以便编辑行为是明智的。这也需要调整默认 textLabel 的框架,以便没有重叠。【参考方案5】:

无法更改 UILabel 部分的字体或颜色。这里最简单的方法是创建一个单元子类,并在界面生成器或代码中添加两个标签。 This post 向您展示了如何计算标签中文本的大小,以便您可以动态调整标签的大小,如果您希望两个标签的文本是“thouching”的。

【讨论】:

以上是关于如何使用 2 个不同颜色的标签制作 UITableViewCell?的主要内容,如果未能解决你的问题,请参考以下文章

如何制作新颜色?

网页制作中 如何改变水平线颜色

更改 UITable 部分背景颜色而不丢失部分标题

如何使 UIButton 从 UITable 中的选择中播放相应的音频剪辑?

如何控制HR标签制作的网页水平线的长度和颜色?

如何在 div 标签上制作背景颜色