2012-02-03 5 views
2

を変更していない:のUITableViewCellのtextLabelのフォントの変更は、視覚

Fonts.xibはのUIViewControllerのサブクラスであるフォントオブジェクトによって制御されるだけのUITableViewとUIViewのある
[(UINavigationController *)self.parentViewController pushViewController:[[[Fonts alloc] initWithNibName:@"Fonts" bundle:nil] autorelease] animated:YES]; 

とUITableViewのdataSourceとdelegateとして機能します。フォントオブジェクトで

は、私のようなの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をドラッグして、彼らが再描画され立ち直るせて、ビューならば、細胞がで表示する場合、それはUITableView without changed fonts

ようになります表示されますフォントが変更されたラベル。

UITableViewCellsがあまりにも早く描画されているように見えます。私はそれらの図面を延期する場合はすべて正しいように見えますが、UINavigationControllerが私のビューを所定の場所にスライドさせると、UITableViewが正しく表示されるようにします。

私が間違っていることは何ですか?

EDIT:問題の簡単な例をDropboxにアップロードしました。 http://dl.dropbox.com/u/5535847/UITableViewIssue.zip

+0

なぜ、 'cellForRow'メソッドでこれをしないのですか? –

+0

@RomanTemchenkoテーブルセルのUIの変更(背景色とフォントなど)は、 'tableView:willDisplayCell:' –

+0

で行われるはずです。 –

答えて

4

SOLVED IT!

私は元のポスターと同じ問題を抱えていましたが、これが問題でした。問題を引き起こしている

行がある:あなたがセルのtextLabel独自のポイントサイズを供給しようとしているが、ポイントサイズはとても奇妙なバグが代わりに発生し、まだ存在しないため、

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

具体的には、あなたの問題があります。私にとっては、特異行列が非可逆であるために「変換」が失敗していることに気付きました。私がpointSizeとして標準値をハードコードするとすぐに、すべてのラベルが適切なフォントで即座に描画されるのを見ました。注:これは、なぜあなたのtextLabelが本当にpointSizeを持っているので、再描画がうまくいったのかという意味です。

いずれにしても、ここでpointSizeを明示的に設定する必要があります。これは、「再読み込み」するまでは何も持たないため、「既に持っている」textLabelを使用します。

+0

これはうまくいった!ありがとう! – matthewc

2

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

}

+1

私はそれを試みました。同じ結果が得られます。 – matthewc

+1

それから、エラーは別の場所にある必要があります。これはやり方です。あなたが忘れてしまった別のデリゲートメソッドで再度変更しているかもしれません。 –

+0

UITableViewCellsがあまりに早く描画されているという問題があるようです。私はそれらの図面を延期する場合はすべて正しいように見えますが、UINavigationControllerが私のビューを所定の場所にスライドさせると、UITableViewが正しく表示されるようにします。 – matthewc

0

私はテーブルのセルがこのようにカスタマイズできるように設計されていることはよく分かりません。表のセルは、フォントをカスタマイズしないことを前提としているので、自分がしようとしているものと互換性のある方法で描画しないことがあります。

カスタムセルを作成したほうがよかったり、作成時にテーブルセルにサブビューとしてUILabelを追加したり、代わりにそのラベルのフォントを設定したりすることをお勧めします。

このような小規模なカスタマイズでは、過剰なもののように見えるかもしれませんが、柔軟性があり、動作することが保証されています。

関連する問題