Форматирование ячеек UITableView в iphone - PullRequest
3 голосов
/ 20 августа 2010

Я занимаюсь разработкой приложения для iphone. На изображении ниже я хочу, чтобы имя было простым шрифтом, а фамилия - жирным шрифтом. Как я могу это сделать? Пожалуйста, предложите мне .. Пожалуйста, проверьте это изображение:

alt text

Еще один вопрос ... Теперь я думаю обратный путь, но проблема здесь в том, что первая и вторая строки, которые вы видите, являются частью одной и той же строки. Я хочу, чтобы первая строка была жирной, а вторая - простым шрифтом. Я храню это в словаре. Так что в моем словаре есть ключ, а значение - это строка имен и отделов. Я не могу установить шрифт. Я попытался создать две метки и попытался разбить строку в соответствии с индексом и присвоить ее меткам, которые я создал. Но в этом случае индекс продолжает меняться, так как может быть имя контакта или не может быть имени.

В этом случае Prinicipal должен быть простым шрифтом, а имя - жирным шрифтом

Пожалуйста, смотрите изображение ниже:

alt text

Ответы [ 4 ]

7 голосов
/ 22 ноября 2012

Начиная с OS 6.0, в UILabel есть свойство, называемое attributetedText, которое имеет тип 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];

См. Также Введение в руководство по программированию атрибутных строк .

5 голосов
/ 21 августа 2010

Поскольку метка, в которой отображается строка имени, определяет форматирование и стиль, если вы хотите использовать разные стили, вам нужно иметь разные метки для каждого стиля, который вы хотите. В частности, вам понадобится 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];

А что касается разбиения строки имени, вы, вероятно, там довольно ограничены. Я бы разделил первый пробел и предположил, что первая строка - это фамилия (как на вашем первом рисунке).

Принципиальный случай аналогичен, вам нужен ярлык для каждого стиля, который вы хотите представить.

0 голосов
/ 15 мая 2014
- (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;

}
0 голосов
/ 20 августа 2010

Вы должны создать пользовательский UITableViewCell. http://icodeblog.com/2009/05/24/custom-uitableviewcell-using-interface-builder/

...