0

Можно ли получить доступ к методам ViewController из appDelegate, как это возможно, с помощью следующего кода :?Делегат ViewController

AppDelegate *ad = (AppDelegate *) [[UIApplication sharedApplication] delegate]; 

Когда я пытаюсь

ViewController *vc = (ViewController *) [[UIApplication sharedApplication] delegate]; 

Я получаю сообщение об ошибке ...

Спасибо!

+1

Вы получаете сообщение об ошибке, потому что вы называете что-то «ViewController», что, очевидно, ** не является «ViewController». (Я говорю «очевидно», потому что он не может быть одним, если он уже является «AppDelegate».) Вы можете делать что-то вроде того, что хотите, но код зависит от того, как создается контроллер представления. –

ответ

1
ViewController *vc = (ViewController *)[UIApplication sharedApplication].keyWindow.rootViewController; 

или если ваш делегат имеет свойство

YourAppDelegate *ad = (YourAppDelegate*)[UIApplication sharedApplication].delegate; 
ViewController *vc = ad.yourViewControllerProperty; 
2

в вашем AppDelegate, предполагая viewController ваш rootViewController, вы можете получить список всех контроллеров отображения на стеке с:

NSLog(@"List of current active view controllers:%@", self.viewController.navController.viewControllers); 

Для доступа к определенному контроллеру вида в представленииКонтроллеры:

[[self.viewController.navController.viewControllers objectAtIndex:i] someMethodOfThatViewController]; 
Смежные вопросы