更新 UIView 子类中 drawRect 中绘制的组件中的文本

Posted

技术标签:

【中文标题】更新 UIView 子类中 drawRect 中绘制的组件中的文本【英文标题】:Updating text in component drawn in drawRect in UIView subclass 【发布时间】:2011-01-11 20:09:53 【问题描述】:

我有一个 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]];
   

【问题讨论】:

您是尝试以编程方式还是在 IB 中更新文本? 以编程方式。值得注意的是,我也用 CATextLayer 尝试过,但也没有用。 【参考方案1】:

为了以编程方式更改标签的文本,您需要执行以下操作:

在您的 .h 文件中:

在您的@interface 部分中将它们定义为UILabels

在您的@property 声明中将IBOutlets 添加到它们

在您的 .m 文件中:

在您的 .m 文件中为它们添加 @synthesize 行。

之后,您可以将它们称为任何其他 self. 变量,并设置它们的 text 属性以更改它们在您的显示中的显示方式。

一般来说,尝试继承 UIView 可能有点棘手(正如您所发现的那样),但希望以上内容至少对您有所帮助。

【讨论】:

变量是类变量。我没有添加插座,因为这些对象不是在 IB 中构建的。 我使用 self 访问了变量。我仍然留下拒绝更改的文本。 啊哈,所以您也在以编程方式创建标签。我以前没有这样做过,所以我不能肯定地告诉你。 感谢您抽出宝贵时间回答。 @Kyle Humfeld 所以,我最终遵循了你的所有步骤,我已经尝试过 [imageWithCaptionView.label setText:@"testBALBALBAL"];或 imageWithCaptionView.label.text = @"testBALBALBAL";其次是[imageWithCaptionView setNeedsDisplay];但它不起作用。任何提示?谢谢

以上是关于更新 UIView 子类中 drawRect 中绘制的组件中的文本的主要内容,如果未能解决你的问题,请参考以下文章

加速 -drawRect: UIView 子类的方法

跨多个 UIView 子类的单个 drawRect 实现

XIB 中的 UIView 子类不显示(drawRect:从未调用)

让 UIView drawRect 发生在后台线程中

如何使用 drawRect 覆盖在 UIView 子类的某些区域中获得透明度

我正在使用 drawRect 实现 UIView 子类:如何绘制按钮?