Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/115.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios UITableViewCell';s文本标签';s字体更改未在视觉上更改_Ios_Uitableview - Fatal编程技术网

Ios UITableViewCell';s文本标签';s字体更改未在视觉上更改

Ios UITableViewCell';s文本标签';s字体更改未在视觉上更改,ios,uitableview,Ios,Uitableview,当我将UIViewController推到我的UINavigation控制器上时,如: [(UINavigationController *)self.parentViewController pushViewController:[[[Fonts alloc] initWithNibName:@"Fonts" bundle:nil] autorelease] animated:YES]; 其中Fonts.xib是UIView,只有UITableView由作为UIViewController子

当我将UIViewController推到我的UINavigation控制器上时,如:

[(UINavigationController *)self.parentViewController pushViewController:[[[Fonts alloc] initWithNibName:@"Fonts" bundle:nil] autorelease] animated:YES];
其中Fonts.xib是UIView,只有UITableView由作为UIViewController子类的Fonts对象控制,并充当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是UIFont对象的NSArray

当视图出现时,它看起来像

如果我在UITableView上调用reloadData,或者如果我用手指将UITableViewCells拖离屏幕,让它们反弹回来,它们将被重新绘制,并且视图中的单元格显示的标签字体已更改


问题似乎在于UITableViewCells绘制得太早。如果我延迟绘制它们,一切看起来都是正确的,但我希望UITableView在UINavigationController将我的视图滑动到位时能够正确显示

知道我做错了什么吗


编辑:我将一个简单明了的问题示例上传到Dropbox

内设置标签字体-tableView:cellforrowatinexpath:

- (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;

}

我不确定表格单元格的设计是否可以这样定制。表格单元格可能认为您不会自定义字体,因此不会以与您尝试的方式兼容的方式绘制自身

最好创建一个自定义表格单元格,或者在创建表格单元格时将UILabel作为子视图附加到表格单元格中,然后让他们设置该标签的字体

对于这样一个小的定制来说,这似乎有些过分,但它很灵活,而且保证能正常工作。

解决了这个问题

好吧,我的问题和原来的海报完全一样,这就是问题所在

导致问题的原因是:

[cell.textLabel setFont:[(UIFont *)[self.listOfFonts objectAtIndex:indexPath.row] fontWithSize:cell.textLabel.font.pointSize]];
具体来说,您的问题是因为您试图将自己的pointSize提供给单元格的textLabel,但pointSize并不存在,因此会出现奇怪的错误。对我来说,我注意到“变换”失败了,因为奇异矩阵是不可逆的。当我硬编码一个标准值作为我的pointSize时,我立即看到我所有的标签都以正确的字体绘制。注意:这解释了为什么重画会起作用,因为这样你的textLabel确实有一个pointSize


在任何情况下,您都需要在此处显式设置点大小,不要使用textLabel“已有”的内容,因为在“重新加载”单元格之前,它没有任何内容。

为什么不在
cellForRow
方法中执行此操作?@RomanTemchenko UI更改(例如背景颜色和字体)表单元格上的错误应该在
tableView:willDisplayCell:
中完成。请参阅下面我的评论以获得正确答案。然后错误必须在其他地方,这就是错误的处理方式。也许你又在用另一个你忘记的委托方法或者类似的方法修改它。问题似乎是UITableViewCells绘制得太早了。如果我延迟绘制它们,一切看起来都是正确的,但我希望UITableView在UINavigationController将我的视图滑动到位时能够正确显示。