2012-01-08 5 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 не сделал этого.)

Anyways: если вы сделали это хорошо, например, ViewController *vc = [[ViewController alloc] init]; создание нового экземпляра не повлияло бы на другой экземпляр. Вы должны где-то хранить указатель на свой экземпляр, например. г. установить @property (retain) ViewContrller *vc; на объект приложения делегат вашего приложения, и доступ к нему через эту собственность, как это:

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

, что так оно и должно работать.

Надеюсь, это поможет.

0

Как вы начинаете свою переменную vc? Я предполагаю, что именно здесь исходит ошибка. Попробуйте сделать:

VC = [[ViewController Alloc] initWithNibName: @ ViewController "];.

Если вы уже делаете это, убедитесь, что ваш IBOutlet подключен правильно Вы устанавливаете переменную правильно, поэтому ошибка должна происходить откуда-то еще.

Смежные вопросы