Вернуться к первому индексу UINavigationController? - PullRequest
2 голосов
/ 22 сентября 2011

Я делаю приложение, которое использует UINavigationController, и переключаюсь на другие UIViewController следующим образом:

if(self.myViewController == nil){
    MyViewController *aViewController = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil];
    self.myViewController = aViewController;
    [aViewController release];
}

AppDelegate *delegate = [[UIApplication sharedApplication] delegate];
[delegate.myNavController pushViewController:myViewController animated:YES];

Я предполагаю, что это создает кучу UIViewControllers в UINavigationController, может быть, массив индексов? Я хотел бы знать, как повернуть назад, не возвращаясь один за другим.

Например, я пересекаю несколько экранов и с помощью кнопки хочу вернуться по первому указателю навигации. Я также хотел бы знать, как изменять индексы, просматривать, стирать и все, что имеет отношение к этой проблеме.

Извините, если я плохо объяснил.

Ответы [ 6 ]

8 голосов
/ 22 сентября 2011

Вы задали два вопроса.

Во-первых, как мне вернуться к моему первому контроллеру вида?Как ответили @Thomas Clayson и @ender, для этого вам нужен метод popToRootViewControllerAnimated: объекта вашего навигационного контроллера.

Второй - как перейти к определенному индексу в стеке контроллера представления.Ответ заключается в том, что вы можете явно установить массив viewControllers.Таким образом, вы можете извлечь текущий список контроллеров представления, изменить его и вернуть обратно в стек navigationController.Это сбросит стек и оживит вас, перемещаясь к верхнему элементу в стеке.

Таким образом:

NSMutableArray *controllers = self.navigationController.viewControllers;
[controllers removeObjectAtIndex:[controllers count] - 1]; //or whatever
[self.navigationController setViewControllers:controllers animated:YES];
6 голосов
/ 22 сентября 2011
NSArray *viewControllers = [[self navigationController] viewControllers];
    for (int i = 0; i < [viewContrlls count]; i++){
        id obj = [viewControllers objectAtIndex:i];
        if ([obj isKindOfClass:[yourViewControllername class]]){
            [[self navigationController] popToViewController:obj animated:YES];
            return;
        }
    }

Используя это, вы можете вернуться к любому указанному viewController.

4 голосов
/ 22 сентября 2011
[self.navigationController popToRootViewControllerAnimated:YES];

Вернет вас к самому первому контроллеру представления (корневому контроллеру представления).

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

2 голосов
/ 22 сентября 2011

Используйте это

NSArray *viewContrlls=[[NSArray alloc] initWithArray:[[self navigationController] viewControllers]];
    id obj=[viewContrlls objectAtIndex:1];
    [[self navigationController] popToViewController:obj animated:YES];
    [viewContrlls release];
1 голос
/ 22 сентября 2011

Вы можете вернуться к первому виду с помощью

[self.navigationController popToRootViewControllerAnimated:YES];

При этом вы также можете удалить определенный контроллер представления или перейти к определенному индексу в вашем контроллере представления, если вы посмотрите на пример.

NSMutableArray *allViewControllers = [NSMutableArray arrayWithArray:navigationController.viewControllers];
// You can now manipulate this array with the methods used for NSMutableArray to find out / perform actions on the navigation stack   

[allViewControllers removeObjectIdenticalTo: removedViewController];
// You can remove a specific view controller with this. 

navigationController.viewControllers = allViewControllers;
1 голос
/ 22 сентября 2011

Вы должны использовать popToRootViewControllerAnimated: С UINavigationController ссылка на класс:

Выводит все контроллеры представления в стек, кроме корневого представления. контроллер и обновляет дисплей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...