Мне нужен экземпляр контроллера корневого представления.
Я пробовал эти подходы:
UIViewController *rootViewController = (UIViewController*)[[[UIApplication sharedApplication] keyWindow] rootViewController];
Возвращает: null :
Также, когда я пытаюсь получить массив контроллеров:
NSArray *viewControllers = self.navigationController.viewControllers;
Он возвращает только один контроллер, но это не мой контроллер корневого представления.
Если я попробую взять с контроллера навигации:
UIViewController *root = (UIViewController*)[self.navigationController.viewControllers objectAtIndex:0];
Возвращает: null :
Есть идеи, почему? Что еще я мог бы попытаться получить экземпляр моего корневого контроллера представления?
Спасибо.
Ответы:
если вы пытаетесь получить доступ к
rootViewController
заданному вами в appDelegate. попробуй это:Objective-C
Swift
Swift 3
Swift 4 и 4.2
Swift 5 и 5.1 и 5.2
источник
Objective-C
Swift 2.0
Swift 5
источник
Как предлагает здесь @ 0x7fffffff, если у вас есть UINavigationController, это может быть проще:
Код в ответе выше возвращает контроллер UINavigation (если он у вас есть), и если это то, что вам нужно, вы можете использовать
self.navigationController
.источник
Если у вас нет уважительной причины, сделайте это в корневом контроллере:
И когда вы хотите его уведомить:
источник
Swift 3
источник
Быстрый способ сделать это, вы можете вызвать это из любого места, он возвращает необязательный параметр, так что будьте осторожны:
Он включен как стандартная функция в:
https://github.com/goktugyil/EZSwiftExtensions
источник
Swift 3: изменить ViewController withOut Segue и отправить AnyObject Use: Identity MainPageViewController на целевой ViewController
или если вы хотите изменить контроллер представления и отправить данные
источник