在iphone中格式化UITableView单元格

时间:2010-08-20 18:16:01

标签: ios iphone uitableview ios-simulator cell

我正在开发一款iPhone应用程序。在下面的图像中,我希望第一个名称是普通字体,最后一个名称是粗体..我该怎么做?请建议我..请检查此图片:

alt text

另一个问题。现在我认为相反的方式,但这里的问题是你看到的第一行和第二行是同一个字符串的一部分。我希望第一行是粗体,第二行是普通字体。我将它存储在字典中。所以我的字典有一个键,值是一串名称和部门。我无法设置字体。我试图创建两个标签,并尝试根据索引拆分字符串并将其分配给我创建的标签。但是,在这种情况下,索引会不断变化,因为可能有联系人的名字,或者可能没有任何名称。

在这种情况下,Prinicipal应该是普通字体,名称应该是粗体

请参阅下图:

alt text

4 个答案:

答案 0 :(得分:7)

启动OS 6.0,UILabel上有一个名为attributedText的属性,它具有NSAttributedString类型(在iOS 3.2及更高版本中可用)。

这就是我使用它的方式:

  NSDictionary  *firstNameAttributes = @{ NSFontAttributeName : [UIFont fontWithName:@"Helvetica" size:18.0],
                                          NSStrokeColorAttributeName : [UIColor blackColor]};
  NSDictionary  *lastNameAttributes = @{NSFontAttributeName : [UIFont fontWithName:@"Helvetica-Bold" size:20.0],
                                        NSStrokeColorAttributeName : [UIColor blackColor]};
  NSString* first = ... first name ..;
  NSString* last = [NSString stringWithFormat:@" %@",... last name ....];
  NSMutableAttributedString * name =
    [[NSMutableAttributedString alloc] initWithString:first attributes:firstNameAttributes];
  NSMutableAttributedString * lastName =
  [[NSMutableAttributedString alloc] initWithString:last attributes:lastNameAttributes];
  [name appendAttributedString:lastName];

  [[cell textLabel] setAttributedText:name];

另见Introduction to Attributed String Programming Guide

答案 1 :(得分:5)

由于您显示名称字符串的标签定义了格式和样式,如果您想要具有不同的样式,则需要为每种样式设置不同的uilabel。具体来说,您需要一个uilabel作为名字:firstNameLabel.font = [UIFont systemFontOfSize:12];,一个作为姓氏:lastNameLabel.font = [UIFont boldSystemFontOfSize:12];

首先,名字字符串是firstNameLabel,然后调用[firstNameLabel sizeToFit]以使标签文本适合其中。然后使用firstNameLabel的框架将lastNameLabel直接放在其后面。

UILabel * firstNameLabel = [[UILabel alloc] initWithFrame:CGRectMake(10,10,100,25)];
firstNameLabel.tag = firstNameLabelTag //This should be a constant probably
firstNameLabel.font = [UIFont systemFontOfSize:12];
firstNameLabel.text = theStringRepresentingTheFirstName;
[firstNameLabel sizeToFit];

UILabel * lastNameLabel = [[UILabel alloc] initWithFrame:
    CGRectMake(10+firstNameLabel.frame.size.width+2, 10, 100, 25)];
lastNameLabel.tag = lastNameLabelTag //This should be a constant probably
lastNameLabel.font = [UIFont boldSystemFontOfSize:12];
lastNameLabel.text = theLastNameString;.

[cell.contentView addSubview:firstNameLabel];
[cell.contentView addSubview:lastNameLabel];

至于拆分名称字符串,你可能非常有限。我会拆分第一个空格并假设第一个字符串是姓氏(如第一张图片中所示)。

原理情况类似,您需要为每个要呈现的样式添加标签。

答案 2 :(得分:0)

- (IBAction)buttonPressed:(UIButton *)sender {
    NSString *title = [sender titleForState:UIControlStateNormal];
    NSString *plainText = [NSString stringWithFormat:@"%@ button pressed.", title];
    NSMutableAttributedString *styledText = [[NSMutableAttributedString alloc] initWithString:plainText];
    NSDictionary *attributes = @{ NSFontAttributeName : [UIFont boldSystemFontOfSize:self.statusLabel.font.pointSize]};
    NSRange nameRange = [plainText rangeOfString:title];
    [styledText setAttributes:attributes range:nameRange];
    self.statusLabel.attributedText = styledText;

}

答案 3 :(得分:-2)