Отклонить только представленный контроллер представления, а не весь стек навигации Swift

У меня есть контроллер панели вкладок. В том, что первая вкладка - это навигационный контроллер. Давайте назовем его контроллером A. Затем я нажимаю на него другой контроллер представления. Давайте назовем его контроллером B. После этого я представляю контроллер представления C из контроллера представления B. Теперь я хочу отклонить только контроллер представления B.

Панель вкладок - A (корневой vc навигационного контроллера) -> Push VC -> B -> Present VC -> C

А в Б идет с использованием self.navigationController.pushViewController(animated: true, completion: nil)

От B до C происходит вот так
let vc = CViewController() vc.modalPresentationStyle = .fullScreen self.present(vc,animated: true,completion: nil)

Теперь, когда я использую self.dismiss(animated: true, completion: nil) в контроллере представления C. Он возвращается к корневому контроллеру представления, то есть vc A. Я хочу, чтобы он перешел к VC B.

Видео выпуска


comment
Когда вы вызываете self.dismiss, вы вызываете увольнение не на C, а на B. Вы пробовали popViewController?   -  person Orion Cygnus    schedule 07.01.2020
comment
Я написал код отклонения в vc C. И контроллер всплывающего окна не будет работать, потому что C представлен модально, а не нажат   -  person Swapstar    schedule 07.01.2020
comment
Я предполагаю, что вы пробовали vc.dismiss() вместо self.dismiss()?   -  person Orion Cygnus    schedule 07.01.2020
comment
Да это уже пробовал   -  person Swapstar    schedule 07.01.2020
comment
Вы можете добавить скриншот вашей раскадровки?   -  person Ketan Parmar    schedule 07.01.2020
comment
Я делаю все программно. Нет раскадровки   -  person Swapstar    schedule 07.01.2020
comment
Вопрос обновлен видео о том, что происходит @KetanParmar   -  person Swapstar    schedule 07.01.2020
comment
@OrionCygnus Пожалуйста, посмотрите видео   -  person Swapstar    schedule 07.01.2020
comment
Вы встраиваете навигационный контроллер в свой контроллер представления B? Можете ли вы показать мне свою иерархию, например вкладку - навигация - vcA - навигация и т. д.?   -  person Ketan Parmar    schedule 07.01.2020
comment
Опубликованная вами анимация не соответствует вашему описанию, поскольку первая анимация нажатия охватывает панель вкладок, что означает, что TabBarController встроен в контроллер навигации, а не наоборот. Поскольку вы не используете раскадровки, попробуйте опубликовать код для минимально воспроизводимого примера.   -  person DonMag    schedule 07.01.2020


Ответы (1)


Немного подумав, я воспроизвел то, что вы пытались сделать, и понял, что проблема не в вызове увольнения. Это связано с тем, как вы назвали этот View Controller в первую очередь. Немного измените свой код B на C.

Вместо:

пусть vc = CViewController()

vc.modalPresentationStyle = .полноэкранный

self.present (vc, анимированный: правда, завершение: ноль)

использовать:

let sb : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let vc = sb.instantiateViewController(identifier: "C")
vc.modalPresentationStyle = .fullScreen
self.present(vc, animated: true, completion: nil)

Вам нужно будет указать идентификатор вашего контроллера представления в раскадровке (идентификатор раскадровки)

Теперь, когда вы вызываете self.dismiss(), он должен закрывать только C. Я проверил это на своем компьютере с Xcode 11.1.

person Orion Cygnus    schedule 08.01.2020
comment
обратитесь к этому: stackoverflow.com/questions/44160137/ - person Orion Cygnus; 08.01.2020
comment
Это говорит о нажатии контроллера представления. Моя проблема связана с представлением модально. - person Swapstar; 09.01.2020