Я отправляю пользователя на страницу одним нажатием кнопки. Эта страница является UITableViewController .
Теперь, если пользователь нажимает на ячейку, я бы хотел вернуть его на предыдущую страницу.
Я думал о чем-то вроде, self.performSegue("back")....
но это, кажется, плохая идея.
Как правильно это сделать?
Ответы:
Свифт 3:
Если вы хотите вернуться к предыдущему виду контроллера
Если вы хотите вернуться к корневому контроллеру представления
источник
.popViewController(animated: true)
_ = self.navigationController?.popToRootViewController(animated: true)
_ =
это быстрое соглашение для этого.Свифт 3 , Свифт 4
navigationController является необязательным, поскольку его может не быть.
источник
[weak self]
иself?.navigationController?.
override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if let vc = segue.destination as?
Но когда я использую это я не могу использовать чтоСвифт 3
Я мог бы опоздать с ответом, но для быстрого 3 вы можете сделать это следующим образом:
источник
dismiss:
он не только отклонит текущий контроллер представления, но и корневой контроллер представления, и это не то, что было задано здесь.dismiss(animated: true, completion: nil)
не работает после вращения!Swift 4
есть два способа вернуться / вернуться к предыдущему ViewController:
self.navigationController?.pushViewController(yourViewController, animated: true)
в этом случае вам нужно использоватьself.navigationController?.popViewController(animated: true)
self.present(yourViewController, animated: true, completion: nil)
в этом случае вам нужно использоватьself.dismiss(animated: true, completion: nil)
источник
В случае, когда вы представили
UIViewController
изнутри тоUIViewController
есть ..Просто вызовите
dismiss
функцию:источник
self.dismiss(animated: true)
- не работает после ротацииСвифт 5 и выше
вариант 1: использование с контроллером навигации
Случай 2: использование с настоящим контроллером представления
источник
Если Segue является видом 'Show' или 'Push', то вы можете вызвать "popViewController (animated: Bool)" в экземпляре UINavigationController. Или, если segue является своего рода «настоящим», тогда вызовите «dismiss (animated: Bool, завершение: (() -> Void)?)» С экземпляром UIViewController
источник
для Swift 3 вам просто нужно написать следующую строку кода
источник
Попробуйте это: для предыдущего просмотра используйте это:
поп в корень используйте этот код:
источник
Swift 4.0 Xcode 10.0 с TabViewController в качестве последнего представления
Если ваш последний ViewController встроен в TabViewController, приведенный ниже код отправит вас в корень ...
Но если вы действительно хотите вернуться к последнему представлению (это может быть представление Tab1, Tab2 или Tab3 ...), вы должны написать следующий код:
Это работает для меня, я использовал представление после одного из моего TabView :)
источник
Для вопросов, касающихся того, как встроить ваш viewController в navigationController в раскадровке:
источник
Этот работает для меня (Swift UI)
источник
Я сделал это так
источник
Я хотел бы предложить другой подход к этой проблеме. Вместо того, чтобы использовать контроллер навигации, чтобы открыть контроллер представления, используйте разматывать сегменты. Это решение имеет несколько, но действительно важных преимуществ:
Вы можете найти более подробную информацию в разделе «Размотка сегментов» . Как лучше объяснить в предыдущей ссылке, в том числе, как отправить данные обратно, но здесь я сделаю краткое объяснение.
1) Перейдите к контроллеру представления пункта назначения (не источника) и добавьте раскрутку:
2) Перетащите CTRL от самого контроллера представления к значку выхода в исходном контроллере представления:
3) Выберите функцию размотки, которую вы только что создали несколько минут назад:
4) Выберите "раскрутить" и дайте ему имя:
5) Пойдите в любое место контроллера представления источника и вызовите sewind:
Я обнаружил, что такой подход приносит много пользы, когда ваша навигация начинает усложняться.
Я надеюсь, что это поможет кому-то.
источник
Я могу перенаправить на корневую страницу, написав код в «viewDidDisappear» контроллера,
override func viewDidDisappear(_ animated: Bool) { self.navigationController?.popToRootViewController(animated: true) }
источник