Изменение шрифта в textLabel в UITableViewCell не изменилось визуально - PullRequest
2 голосов
/ 04 февраля 2012

Когда я помещаю UIViewController в мой контроллер UINavigation, например:

[(UINavigationController *)self.parentViewController pushViewController:[[[Fonts alloc] initWithNibName:@"Fonts" bundle:nil] autorelease] animated:YES];

Где Fonts.xib - это UIView, в котором только UITableView управляется объектом Fonts, который является подклассом UIViewController и действует как источник данных UITableView.и делегировать.

В объекте Fonts я создаю UITableViewCell, например:

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

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier: @"BlahTableViewCell"];

    if (!cell) {
        cell = [[UITableViewCell alloc]
                initWithStyle: UITableViewCellStyleDefault
                reuseIdentifier: @"BlahTableViewCell"];
        [cell autorelease];  // Delete for ARC
    }

    return cell;

}

И затем я изменяю шрифт ячейки здесь:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
    [cell.textLabel setFont:[(UIFont *)[self.listOfFonts objectAtIndex:indexPath.row] fontWithSize:cell.textLabel.font.pointSize]];
    cell.textLabel.text = [(UIFont *)[self.listOfFonts objectAtIndex:indexPath.row] fontName];
}

listOfFonts isNSArray объектов UIFont.

Когда вид отображается, он выглядит как UITableView без измененных шрифтов

Если я вызываю reloadData на UITableView или перетаскиваю UITableViewCells за пределы экранас моим пальцем, и пусть они отскочат назад, они перерисовываются, и вид ячеек отображается с метками с измененными шрифтами.

Кажется, проблема в том, что UITableViewCells отрисовываются слишком рано.Если я откладываю их отрисовку, все выглядит правильно, но я хочу, чтобы UITableView отображался правильно, когда UINavigationController сдвигает мой вид на место.

Есть идеи, что я делаю неправильно?

РЕДАКТИРОВАТЬ:Я загрузил простой и понятный пример своей проблемы в Dropbox.http://dl.dropbox.com/u/5535847/UITableViewIssue.zip

Ответы [ 3 ]

4 голосов
/ 06 июня 2012

РЕШЕНО!

Хорошо, у меня были те же проблемы, что и у исходного постера, и это была проблема.

Строка, вызывающая проблемы:

[cell.textLabel setFont:[(UIFont *)[self.listOfFonts objectAtIndex:indexPath.row] fontWithSize:cell.textLabel.font.pointSize]];

В частности, ваша проблема в том, что вы пытаетесь передать textLabel ячейки свой собственный pointSize, но pointSize еще не существует, поэтому вместо этого возникают странные ошибки. Для меня я заметил, что «преобразование» терпит неудачу из-за необратимой особой матрицы. Как только я жестко закодировал стандартное значение в качестве своего pointSize, я сразу увидел, что все мои надписи нарисованы с правильным шрифтом. Примечание: это имеет смысл, почему перерисовка сработала, потому что тогда у вашего textLabel действительно есть pointSize.

В любом случае вам нужно явно указать здесь свой pointSize, не используя то, что textLabel «уже имеет», потому что у него ничего нет, пока вы не «перезагрузите» ячейку.

2 голосов
/ 04 февраля 2012

Установить шрифт надписи внутри -tableView:cellForRowAtIndexPath:.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
  static NSString *identifier = @"identifier";
  UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
  if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier] autorelease];

    // do it here if your font doesn't change ....
  }

  // otherwise here with your font ...
  cell.textLabel.font = [UIFont boldSystemFontOfSize:12];
  return cell;

}

0 голосов
/ 04 февраля 2012

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

Было бы лучше создать пользовательскую ячейку таблицы или добавить UILabel в качестве подпредставления к ячейке таблицы при ее создании, а вместо этого установить шрифт этой метки.

Это может показаться излишним для такой небольшой настройки, но он гибкий и гарантированно работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...