无法更改以编程方式生成的 UIView 中的标签
Posted
技术标签:
【中文标题】无法更改以编程方式生成的 UIView 中的标签【英文标题】:Can't change label in programmatically generated UIView 【发布时间】:2012-11-22 20:58:30 【问题描述】:我正在尝试使用以编程方式加载的 NIB 更改标签。我创建了一个类MyView
,其中包含一个名为myLabel
的UILabel*
,但是当我使用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 中的标签的主要内容,如果未能解决你的问题,请参考以下文章