У меня проблема: Я создал приложение SDK для iOS 5 с раскадровки, содержащее TabBar и три ViewControllers. Из другого класса (Receiver.m) Я хочу получить доступ к ярлыку пользовательского интерфейса, например. ThirdViewController.m, который является одним из вас ViewControllers TabBar.iOS: Access Storyboard TabBar ViewController из другого класса
В ThirdViewController.h я получил
@interface ThirdViewController : UIViewController {
}
@property (weak, nonatomic) IBOutlet UILabel *textlabel1;
@end
и в ThirdViewController.h:
@implementation ThirdViewController
@synthesize textlabel1;
...
Это кажется хорошо, так как я могу установить свойства меток внутри экземпляра ThirdViewController. Теперь, чтобы получить доступ изнутри Receiver.m я использую:
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:[NSBundle mainBundle]];
ThirdViewController *myVC = [storyboard instantiateViewControllerWithIdentifier:@"ThirdViewController"];
myVC.textlabel1.text = @"Hello";
Это не работает. Я не хочу создавать новый экземпляр ThirdViewController, но получить доступ к существующему, чтобы обновить только UILabel. Моя раскадровка в Project Navigator по умолчанию называется MainStoryboard.storyboard. Я делаю что-то не так с получением экземпляра классов ThirdViewController?
Ошибка говорит:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason:
'Storyboard (<UIStoryboard: 0x190590>) doesn't contain a view controller with
identifier 'ThirdViewController''
Спасибо!
Ok, это то, что я боялся. Так есть ли другой способ (я нашел что-то вроде AppDelegate.window.ThirdViewController, который тоже не работает), чтобы каким-то образом получить экземпляр ThirdViewController над иерархией ViewController? Спасибо за вашу рекомендацию, я знаю, что это не хороший стиль, код будет меняться, но поскольку логика приложения отсутствует, я пытаюсь получить доступ к ViewController прямо таким образом. – ZCDev
Вам нужно будет получить контроллер панели вкладок (контроллер корневого представления делегата приложения.window), затем получите свой третий контроллер представлений из массива viewcontrollers контроллера панели вкладок. – jrturton
'AppDelegate.window.UINavigationController.ThirdViewController' меня не достает. Кто-нибудь сделал это раньше и готов поделиться некоторыми фрагментами кода? Я был бы признателен, что. В противном случае мне придется изменить часть структуры кода. – ZCDev