У меня есть стек навигации, в котором говорят 5 UIViewControllers. Я хочу удалить 3-й и 4-й просмотрторы в стеке одним нажатием кнопки на 5-м контроллере. Можно ли сделать это? Если да, то как?Удаление диспетчеров просмотра из навигационного стека
ответ
Используйте этот код и наслаждайтесь:
NSMutableArray *navigationArray = [[NSMutableArray alloc] initWithArray: self.navigationController.viewControllers];
// [navigationArray removeAllObjects]; // This is just for remove all view controller from navigation stack.
[navigationArray removeObjectAtIndex: 2]; // You can pass your index here
self.navigationController.viewControllers = navigationArray;
[navigationArray release];
Надеется, что это поможет.
Вы можете сначала получить все контроллеры представления в массиве, а затем после проверки с помощью соответствующего класса контроллера класса вы можете удалить тот, который вы хотите.
Вот небольшой фрагмент кода:
NSArray* tempVCA = [self.navigationController viewControllers];
for(UIViewController *tempVC in tempVCA)
{
if([tempVC isKindOfClass:[urViewControllerClass class]])
{
[tempVC removeFromParentViewController];
}
}
Я думаю, что это сделает вашу работу легче.
Это может использоваться для многоцелевого использования. Спасибо :) – Hemang
Когда я использую это, контроллер удаляется должным образом. Но когда я использую кнопку «Назад», моя панель навигации отображает информацию о удаленном viewController. Кто-нибудь еще получает это странное поведение и как я могу его исправить? –
Удаление диспетчера представлений из родительского контроля? Мне показалось, что это было изворотливым, поэтому я тестировал на iOS 9, и он просто удаляет представление о tempVC от себя и возвращает его в состояние по умолчанию, как в раскадровке. Вот об этом – NSNoob
Если вы пытаетесь перейти на контроллер 2-го вида с 5-го контроллера (пропуска 3-го и 4-го), вы хотели бы использовать [self.navigationController popToviewController:secondViewController]
.
Вы можете получить secondViewController
из стека контроллера навигации.
secondViewController = [self.navigationController.viewControllers objectAtIndex:yourViewControllerIndex];
Не хотите всплывать в текущем диспетчере представлений. Текущий контроллер просмотра должен оставаться неповрежденным, но мне нужно выставить 2 наблюдаемых контроллера под ним в стеке –
@JeanPaulScott. Интересно, зачем вы хотите это сделать, если не для всплытия – Vignesh
Существует случай, когда у меня бывают разные экземпляры одного и того же элемента управления представлением в стек. Поэтому, когда новый экземпляр создается и помещается в стек, я хочу вывести предыдущий экземпляр и связанный с ним viewcontroller –
Свифта 3:
self.navigationController!.viewControllers.removeAll()
self.navigationController?.viewControllers.remove(at: "insert here a number")
Swift 2.1:
удалить все:
self.navigationController!.viewControllers.removeAll()
удалить с индексом
self.navigationController?.viewControllers.removeAtIndex("insert here a number")
Там куча более возможных действий, как removeFirst, диапазон и т.д.
Глядя на ваш ответ, у меня появилась идея для моего проекта t. Большое спасибо. –
Swift 2,0:
var navArray:Array = (self.navigationController?.viewControllers)!
navArray.removeAtIndex(navArray.count-2)
self.navigationController?.viewControllers = navArray
Итак, вы не пытаетесь развернуть контроллер навигации, вы можете сделать его if-выражением 'if var navArray = ... {...}' – Kiley
- 1. Удаление диспетчеров просмотра из навигационного стека в правильном направлении
- 2. Контроллеры просмотра вышли из навигационного стека Dealloc?
- 3. Держите контроллер просмотра вне навигационного стека
- 4. Слайд справа справа при нажатии контроллера просмотра из навигационного стека
- 5. Неопределенное число диспетчеров просмотра
- 6. Мониторинг навигационного стека
- 7. Удаление активность из стека
- 8. Удаление активности из стека
- 9. удаление чисел из стека?
- 10. Удаление объекта из стека?
- 11. Очистка навигационного стека в Swift
- 12. Контроллер просмотра не выбрано из навигационного контроллера
- 13. Удаление навигационного меню WordPress
- 14. Отмена просмотра стека из раскадровки
- 15. Протокол делегата для двух диспетчеров просмотра
- 16. Пропуск диспетчеров просмотра в стеке UINavigationController
- 17. Удаление активности из стека истории
- 18. Удаление SurfaceView из стека приложений
- 19. Удалите контроллер просмотра из навигационного стека после нажатия segue (с использованием раскадровки)
- 20. viewDidLoad не вызывается при изменении навигационного стека
- 21. IOS UINavigationController - удаление контроллер представления из навигационного стека делает выпустить его на всех
- 22. Каков наилучший алгоритм восстановления состояния навигационного стека
- 23. Использование программ просмотра стека
- 24. подходящий момент для удаления контроллера из навигационного стека
- 25. Как удалить определенный вид из навигационного стека в сенчане?
- 26. Как удалить обратную запись из навигационного стека в окнах 8.1?
- 27. Как удалить страницу из навигационного стека в Windows Phone 8.1
- 28. seguing из стека навигационного контроллера вызывает uitextfield и uisearchbar для замораживания
- 29. iOS: удалить контроллер просмотра из стека навигации
- 30. Незаконное удаление объекта стека
я привязал это и не работает. мне сказали, что что-то связанное со свойствами вызывает его не отмену viewcontrollers. –
это работало в iOS <7, но приводит к странному поведению в iOS 7. –
Я скоро добавлю код для ios7 ... Позвольте мне проверить с iOS 7 – Nit