无法从我的自定义NSObject类中设置UILabel文本

时间:2014-06-17 04:37:30

标签: ios objective-c

这是我的viewController类,我的标签是通过IBOutlet和我的ViewController.h连接的 enter image description here

我的ViewController.m是enter image description here

和我想要设置ViewController标签文本的自定义类,我的自定义类看起来像这样我的customVC.h看起来像这样

enter image description here

enter image description here

5 个答案:

答案 0 :(得分:1)

不是在“.label”方法中设置“init”,而是使用“viewDidLoad:”方法或“viewWillAppear:”方法进行设置。

原因是因为在视图控制器的“init”时间,标签和所有其他用户界面元素尚未从XIB或Storyboard文件加载。

P.S。 Objective C中的最佳实践是使用小写字母开始所有变量和属性。因此,使用“.Label”代替“.label”,甚至更好,使用更具描述性的内容,例如“.viewControllerTitleLabel”。

答案 1 :(得分:0)

我可以看到您的CustomVC.h文件吗?

我假设您的意图是使用CustomVC扩展ViewController类。

所以需要

@interface CustomVC : ViewController
你的CustomVC.h中的

然后在你的CustomVC.m中 它应该是

-(id)init{
   if(self = [super init]){
       [self.Label setText:@"hello world"];
  }
  return self;
}

您不再需要分配viewController对象。

答案 2 :(得分:0)

不需要在你的customVC类中再次分配 - 初始化视图控制器,每次分配init时,都会向对象提供一个单独的引用,在这种情况下,好像你正在设置标签文本查看具有不同参考的控制器而不是您尝试的参考

我建议你将当前视图控制器的引用传递给你的init方法

- (id)initForVC:(ViewController *)refVC
{
    self = [super init];
    if (self) {
        [refVC.Label setText:@"Hello World"];
    }
    return self;
}

只需在customVC的.m文件中添加此函数及其定义

即可
- (id)initForVC:(ViewController *)refVC;
<。>文件中的

您的viewcontroller的viewDidLoad将更改为此

- (void)viewDidLoad
{
    [super viewDidLoad];
    customVC *customVC = [[customVC alloc] initForVC:self];
}

答案 3 :(得分:0)

而不是直接将文本设置为UILabel对象创建NSString类的属性并将文本设置为该属性,然后将NSString属性分配给UILabel,它将起作用。

NSString *str = [NSString stringWithFormat: @"Sample..."];
FirstViewController *f = [[FirstViewController alloc]initWithNibName:@"FirstViewController" bundle:nil];
f.lbl = str; //lbl is the NSString property
[self.navigationController presentViewController:f animated:YES completion:nil];

然后将lbl分配给UILabel对象

lblText.text = lbl;

答案 4 :(得分:0)

我通过使用NSNotificationcenter来解决这个问题