如何从另一个班级改变uilabel

时间:2012-01-08 21:05:27

标签: iphone uilabel

我有我的ViewController.h / m和另一个类Keyboard.h / m。 在我的ViewController.h中,我有一个UILabel:

@interface ViewController : UIViewController{

UILabel *label;

}

@property (nonatomic, retain) IBOutlet UILabel *label;

我的ViewController.m看起来如此

#import "ViewController.h"
@synthesize label;
...

现在我想从Keyboard.m更改标签。 我尝试过这样的事情:

#import "ViewController.h"
...
ViewController *vc;
vc.label.text = @"text";

它编译没有任何错误,但标签不会改变

2 个答案:

答案 0 :(得分:1)

你在这里很容易出错。

ViewController *vc;

声明一个指针,但不会初始化;因此,当您访问其属性vc.label.text时,objc_messageSend()将传递一个虚假的指针,因此它可能会崩溃! (如果你没有这样做,你很幸运。)

无论如何:如果你做得好,就像ViewController *vc = [[ViewController alloc] init];创建一个新实例不会影响另一个实例。你必须将指针存储到某个地方,例如e。 G。将@property (retain) ViewContrller *vc;设置为应用程序的app delegate对象,并通过该属性访问它,如下所示:

[(MyAppDelegate *)[[UIApplication sharedApplication] delegate] vc].label.text = @"new text";

它应该有效。

希望它有所帮助。

答案 1 :(得分:0)

你是如何启动你的vc变量的?我猜这是错误的来源。尝试做:

  

vc = [[ViewController alloc] initWithNibName:@ ViewController“];

如果您已经这样做,请确保您的IBOutlet正确连接。您正在正确设置变量,因此错误必须来自其他地方。