0

インターフェイスビルダーで作成した UIView サブクラスに設定されたサブクラスを持つ UIView があります。それらを保持する UIView クラス内のラベルを更新したいと思います。drawRect で描画されたラベルのテキストを更新できないようです。UIView サブクラス内で変更する必要がある要素を描画するためのオプションは何ですか?

// Using UILabel subclass (FontLabel)

- (void)drawRect:(CGRect)rect {
    scoreLabel = [[FontLabel alloc] initWithFrame:CGRectMake(0,0, 400, 50) fontName:@"Intellect" pointSize:80.0f];
    scoreLabel.textColor = [[UIColor alloc] initWithRed:0.8157 green:0.8000 blue:0.0706 alpha:1.0f];

    [scoreLabel sizeToFit];
    [scoreLabel setText:@"Initial text"];
    [self addSubview:scoreLabel];

    [self setNeedsDisplay]; 
    //Also tried [self setNeedsLayout];
}

- (void)updateScoreLabel:(int)val 
{
    [scoreLabel setText:[NSString stringWithFormat:@"%d", val]];
}   



// Using CATextLayer

- (void)drawRect:(CGRect)rect {
    scoreLabel = [CATextLayer layer];
    [scoreLabel setForegroundColor:[UIColor whiteColor].CGColor];
    [scoreLabel setFrame:CGRectMake(0,0, 200, 20)];
    [scoreLabel setAlignmentMode:kCAAlignmentCenter];
    [[self layer] addSublayer:scoreLabel];
    [scoreLabel setString:@"Initial text"];


    [self setNeedsDisplay]; 
    //Also tried [self setNeedsLayout];
}

- (void)updateScoreLabel:(int)val 
{
    [scoreLabel setString:[NSString stringWithFormat:@"%d", val]];
}   
4

1 に答える 1

0

ラベルのテキストをプログラムで変更するには、次の手順を実行する必要があります。

.h ファイル内:

  • UILabel@interface セクションでそれらを s として定義します

  • IBOutlet@property 宣言でそれらに s を追加します

.m ファイルで:

  • それらの @synthesize 行を .m ファイルに入れます。

その後、それらを他のself.変数として参照し、それらのtextプロパティを設定してディスプレイでの表示​​方法を変更できます。

一般に、サブクラス化を試みるUIViewのは少し難しい場合があります (ご存じのように) が、上記が少なくとも少しは役立つことを願っています。

于 2011-01-11T20:24:22.160 に答える