无法更改以编程方式生成的 UIView 中的标签

Posted

技术标签:

【中文标题】无法更改以编程方式生成的 UIView 中的标签【英文标题】:Can't change label in programmatically generated UIView 【发布时间】:2012-11-22 20:58:30 【问题描述】:

我正在尝试使用以编程方式加载的 NIB 更改标签。我创建了一个类MyView,其中包含一个名为myLabelUILabel*,但是当我使用MyView 时,我无法更改myLabel

MyView.h

@interface MyView : UIView

    UIView *view;
    UILabel *myLabel;

@property (nonatomic, retain) IBOutlet UIView *view;
@property (nonatomic, retain) IBOutlet UILabel *myLabel;

MyView.m

@implementation MyView
@synthesize myLabel, view;

- (id)initWithFrame:(CGRect)frame

...

所以当我初始化MyView

UIView *myView = [[MyView alloc] initWithFrame:CGRectMake(0,0,100,100)];

我无法更改标签,因为myLabel 未识别:

myView.myLabel.text = @"New Label Text";

我知道我的逻辑或对UIView 的理解存在一些愚蠢的错误。

【问题讨论】:

"无法更改标签,因为 myLabel 未识别:" - 在哪里?您的代码中的最后两行是否位于同一位置? 我理解我的错误 - 将 *myView 声明为 UIView 而不是 MyView,因此我无权访问属性。 【参考方案1】:

您需要将其声明为,

MyView *myView = [[MyView alloc] initWithFrame:CGRectMake(0,0,100,100)];
myView.myLabel.text = @"New Label Text";

如果使用UIView,则表示在UIView 类中找不到名为myLabel 的属性。由于您已在UIView 的子类中声明了此属性,因此您需要在此处使用子类名称。

【讨论】:

【参考方案2】:

您需要将 myView 转换为 MyView,因为您将其声明为普通 UIView。试试这个:

((MyView *)self.myView).myLabel.text = @"New Label Text";

或者简单地将您的 myView 声明为类型 MyView 而不是 UIView

【讨论】:

以上是关于无法更改以编程方式生成的 UIView 中的标签的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式创建具有多个标签的 UIView

如何以编程方式更改 stackView 内单个 UIView 的高度?

在 xib 中以编程方式自定义 UIView

自动布局打开时如何以编程方式更改 UIView 的位置

iOS 以编程方式更改 uiview 布局

以编程方式更改故事板上的 UIView 的大小