Как добавить пользовательские действия в UIBarButtonItem
У меня есть viewController (HomeViewController()), который встроен в NavigationCotroller, и у меня есть горизонтальный CollectionView с 6 ячейками в нижней части моего viewController, и я реализовал метод делегата didSelectItemAt indexPath: IndexPath
Теперь, когда я выберу любую из ячеек, она перейдет к соответствующему viewController (self.navigationController?.pushViewController(ViewControllerInstance, animated: true)
) давайте назовем его "NewVC1()", так как я использую pushViewController, он создаст для меня кнопку "Назад", и если я нажму на кнопку "Назад", он вернется к предыдущему viewController. Это общий сценарий и работает как ожидалось.
В моем случае после выбора collectionViewCell в "HomeViewController ()" я перейду к "NewVC1()", и там у меня будет тот же CollectionView, что и в предыдущем viewController (HomeViewController()), и теперь, если я выберу любой из Ячейки в текущем viewController (NewVC1 ()) снова я перейду к соответствующему viewController (NewVC2 ()) так же, как до использования pushViewController, и теперь, если я нажимаю кнопку "Назад" в "NewVC2 ()", я не Я хочу перейти к "NewVC1()" и вместо этого я хочу перейти к "HomeViewController()".. Как я могу достичь этого, есть ли возможность сделать это?
Я надеюсь, вы понимаете, что я пытаюсь передать, и мне жаль, если вы не понимаете моего плохого английского, а также извините, так как я думаю, что этот вопрос выглядит очень запутанным..
РЕДАКТИРОВАТЬ:
Символично:
let VC1 = HomeViewController()
let VC2 = NewViewController1()
let VC3 = NewViewController2()
Навигация: VC1 -> VC2 -> VC3 и, если хотите вернуться к VC1,
общий случай:
VC3 -> VC2 и VC2 -> VC1 (возможно)
мое дело:
VC3 -> VC1 (?)
2 ответа
Вместо того, чтобы толкать от VC2
в VC3
используйте setViewControllers. Затем, когда вы нажимаете кнопку назад из VC3
это вернется к VC1
Используйте этот код в VC2
collectionView didSelectItemAt
let vc3 = self.storyboard?.instantiateViewController(withIdentifier: "VC3") as? VC3
if var viewControllers = self.navigationController?.viewControllers {
viewControllers.removeLast()
viewControllers.append(vc3)
self.navigationController?.setViewControllers(viewControllers, animated: true)
}
Вы можете достичь этого двумя способами:
Первый способ - создайте свою собственную кнопку возврата:
let backButton = UIBarButtonItem(title: "Back", style: UIBarButtonItemStyle.plain, target: self, action: #selector(YourViewController.back(sender:)))
self.navigationItem.leftBarButtonItem = backButton
func back(sender: UIBarButtonItem) {
self.navigationController?.popToRootViewController(animated: true)
}
Второй способ - использовать isMovingFromParentViewController:
override func viewWillDisappear(animated : Bool) {
super.viewWillDisappear(animated)
if self.isMovingFromParentViewController {
self.navigationController?.popToRootViewController(animated: true)
}
}