Я хочу проверить, есть ли контроллер представления, в котором я есть, контроллер корневого представления или нажимается на какой-либо контроллер навигации.
Как проверить, нажат ли контроллер навигации или является контроллером корневого представления?
Ответ 1
[self.navigationController viewControllers];
вернет массив всех viewControllers в стеке. Просто сравните первый элемент в этом массиве, чтобы увидеть, является ли контроллер корнем или нет.
например.
UIViewController *vc = [[self.navigationController viewControllers] firstObject];
if([vc isEqual: <viewController to check> ])
{
// code here
}
EDIT: Добавить Swift
let vc = self.navigationController?.viewControllers.first
if vc == self.navigationController?.visibleViewController {
//Code Here
}
Ответ 2
Всякий раз, когда вы нажимаете любой контроллер вида с помощью контроллера навигации, он управляет этими контроллерами представлений в стеке, который поддерживается в режиме Last In First Out. Поэтому, если ваш текущий контроллер представления является корневым контроллером, то в стек может быть только один объект. Вы можете проверить этот стек через этот код
if([self.navigationController.viewControllers count] == 1) {
//Current view controller is root controller
}
Ответ 3
в вашем текущем представлении диспетчера ViewDidLoad просто проверьте self.navigationController.viewControllers.count == 1
означает, что вы в настоящее время находитесь в корневом каталоге вашей навигационной системы. убедитесь, что у вас нет viewcontroller.
if(self.navigationController.viewControllers.count == 1)
{
//do what you want
}
Ответ 4
Что касается ответа @Simon, я добавляю свой ответ, чтобы проверить, когда вы используете меню ящиков, это может помочь вам найти точную проверку контроллера корневого представления.
- (BOOL) checkImRoot:(id)controller {
if(self.window.rootViewController) {
if(self.window.rootViewController == (UIViewController *)controller) {
return YES;
}
}
return NO;
}
В качестве примера, я добавляю этот метод в файл делегата приложения и вызываю его, как это, чтобы проверить,
if([[AppDelegate shareDelegate] checkImRoot:self]) {
//Yeah, I'm a root vc
}else{
//Noo, I'm a child vc
}