2012-01-08 59 views
1

我有我的ViewController.h/m和另一个类Keyboard.h/m。 在我ViewController.h我有一个的UILabel:如何更改另一个类的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"; 

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

回答

1

这是非常容易出错,你在这里做什么。

ViewController *vc; 

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

反正:如果你做得很好,像ViewController *vc = [[ViewController alloc] init];创建一个新的实例不会影响其他实例。您必须将指针存储在某个地方,例如。 G。设置一个@property (retain) ViewContrller *vc;到应用程序的应用程序委托对象,并通过像这样的属性来访问它:

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

这样,它应该工作。

希望它有帮助。

0

你是如何启动你的vc变量的?我猜这就是错误来自哪里。尝试这样做:

VC = [[视图控制器的alloc] initWithNibName:@视图控制器“];

如果你已经在做的是,确保你的IBOutlet中正确地迷上了你设置变量正确的,所以错误必须从其他地方来。

相关问题