如何使用 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.textLabel
,cell.detailTextLabel
和cell.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?的主要内容,如果未能解决你的问题,请参考以下文章