6 способов закрыть контроллер представления в Xcode: упрощение навигации при разработке iOS

При разработке 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: использование разматывающего перехода
Если вы используете раскадровки, вы можете создать разматывающий переход, чтобы закрыть контроллер представления. Вот шаги:

  1. Определите действие размотки в целевом контроллере представления:

    @IBAction func unwindToPreviousViewController(segue: UIStoryboardSegue) {
    // Perform any necessary cleanup or actions
    }
  2. Удерживая клавишу Control, перетащите от кнопки или распознавателя жестов в контроллере исходного представления к значку «Выход» в верхней части сцены контроллера исходного представления в раскадровке.

  3. Выберите действие отмены из списка.