2012-01-08 61 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中正確地迷上了你設置變量正確的,所以錯誤必須從其他地方來。

相關問題