При разработке iOS управление контроллерами представлений и навигацией является важнейшим аспектом создания удобных и интуитивно понятных приложений. Одной из распространенных задач является закрытие или извлечение контроллера представления, что предполагает удаление его из стека навигации. В этой статье блога мы рассмотрим шесть различных методов достижения этой цели, используя разговорный язык, и предоставим примеры кода. Итак, давайте углубимся и упростим процесс навигации в Xcode!
Метод 1: использование метода Pop контроллера навигации.
Первый метод предполагает использование встроенных функций контроллера навигации для извлечения текущего контроллера представления из стека. Этого можно добиться, используя следующий фрагмент кода:
// Inside the current view controller
self.navigationController?.popViewController(animated: true)
Метод 2: закрытие модального контроллера представления
Если контроллер представления был представлен модально, вы можете закрыть его, вызвав метод dismiss(animated:completion:). Вот пример:
// Inside the presented view controller
self.dismiss(animated: true, completion: nil)
Метод 3: переход к определенному контроллеру представления
Иногда у вас может быть несколько контроллеров представления в стеке навигации, и вы хотите вернуться к определенному. Вы можете сделать это, используя метод popToViewController(_:animated:). Вот как это можно сделать:
// Inside the current view controller
if let targetViewController = navigationController?.viewControllers.first(where: { $0 is TargetViewController }) {
navigationController?.popToViewController(targetViewController, animated: true)
}
Метод 4: переход к корневому контроллеру представления
Чтобы удалить все контроллеры представлений из стека навигации и вернуться к корневому контроллеру представления, вы можете использовать метод popToRootViewController(animated:). Вот пример:
// Inside the current view controller
self.navigationController?.popToRootViewController(animated: true)
Метод 5: увольнение контроллера представления с делегатом
Использование делегирования — еще один способ увольнения контроллера представления. Определите протокол в представленном контроллере представления и назначьте ему делегата. Затем вызовите метод делегата, чтобы закрыть контроллер представления. Вот пример:
// Inside the presented view controller
protocol ViewControllerDelegate: AnyObject {
func viewControllerDidDismiss(_ viewController: UIViewController)
}
class PresentedViewController: UIViewController {
weak var delegate: ViewControllerDelegate?
// Call this method when you want to dismiss the view controller
func dismissViewController() {
delegate?.viewControllerDidDismiss(self)
}
}
// Inside the presenting view controller
extension PresentingViewController: ViewControllerDelegate {
func viewControllerDidDismiss(_ viewController: UIViewController) {
viewController.dismiss(animated: true, completion: nil)
}
}
Метод 6: использование разматывающего перехода
Если вы используете раскадровки, вы можете создать разматывающий переход, чтобы закрыть контроллер представления. Вот шаги:
-
Определите действие размотки в целевом контроллере представления:
@IBAction func unwindToPreviousViewController(segue: UIStoryboardSegue) { // Perform any necessary cleanup or actions } -
Удерживая клавишу Control, перетащите от кнопки или распознавателя жестов в контроллере исходного представления к значку «Выход» в верхней части сцены контроллера исходного представления в раскадровке.
-
Выберите действие отмены из списка.