как добавить пользовательские действия в UIBarButtonItem - PullRequest
0 голосов
/ 30 мая 2018

У меня есть 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 и Now, если я нажму накнопка «Назад» в «NewVC2 ()», я не хочу переходить к «NewVC1 ()», и вместо этого я хочу перейти к «HomeViewController ()» .. Как я могу добиться этого, есть ливозможность сделать это?

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

РЕДАКТИРОВАТЬ:

Символически:

let VC1 = HomeViewController() let VC2 = NewViewController1() let VC3 = NewViewController2()

Навигация: VC1 -> VC2 -> VC3 и, если хотите вернуться кVC1,

общий случай:

VC3 -> VC2 и VC2 -> VC1 (возможно)

мой случай:

VC3 -> VC1 (?)

Ответы [ 2 ]

0 голосов
/ 30 мая 2018

Вместо нажатия от 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)
}

enter image description here

0 голосов
/ 30 мая 2018

Это можно сделать двумя способами:

Первый способ - создать собственную кнопку возврата:

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)
}

}
...