【问题标题】:Can't change label in programmatically generated UIView无法更改以编程方式生成的 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,因此我无权访问属性。

标签: ios uiview nib


【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-28
      • 1970-01-01
      • 2013-09-06
      • 1970-01-01
      • 2011-08-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多