Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Swift : iOS, UIKit, pushViewController, presentViewController, navigation controller, modal presentation

В чем разница между pushViewController и presentViewController?

Вопрос проверяет понимание основных способов навигации и представления контроллеров в iOS-разработке, что необходимо для корректного построения пользовательского интерфейса.

Короткий ответ

pushViewController добавляет новый экран в стек навигационного контроллера, что типично для иерархических переходов (например, списка к деталям). presentViewController показывает новый экран поверх текущего, обычно для модальных окон, форм или временных действий. Push-переходы интегрированы в навигационную панель, позволяя вернуться назад свайпом. Present-переходы требуют явного закрытия и часто анимируются снизу или по центру.

Длинный ответ

В iOS-разработке с использованием фреймворка UIKit существует два основных способа показа нового экрана (UIViewController): через навигационный стек и через модальное представление. Понимание их различий критично для создания интуитивного пользовательского интерфейса.

pushViewController и навигационный стек

Метод pushViewController доступен только в контексте UINavigationController. Он добавляет новый контроллер в стек навигации, что означает иерархический переход. Например, из списка товаров (Master) к деталям товара (Detail).

  • Переход обычно анимируется сдвигом экрана вправо.
  • В верхней части экрана автоматически появляется навигационная панель (navigation bar) с кнопкой "Назад".
  • Пользователь может вернуться на предыдущий экран свайпом с левого края экрана.
  • Этот подход идеален для потоков, где важен контекст и последовательность шагов.

presentViewController и модальное представление

Метод presentViewController (или просто present) доступен у любого UIViewController. Он показывает новый контроллер поверх текущего, временно перехватывая фокус пользователя.

  • Переход часто анимируется всплытием снизу (sheet) или появлением в центре (form). Стиль можно настроить.
  • Представленный контроллер не является частью навигационного стека родителя.
  • Для возврата нужно явно вызвать dismissViewController.
  • Используется для модальных действий: форм ввода, предупреждений, выбора даты или временных задач, которые должны быть завершены или отменены.

Практический пример кода

// Пример 1: Push переход (требуется UINavigationController)
let detailVC = DetailViewController()
navigationController?.pushViewController(detailVC, animated: true)

// Пример 2: Present переход (модальное окно)
let modalVC = ModalFormViewController()
modalVC.modalPresentationStyle = .formSheet // Стиль представления
self.present(modalVC, animated: true, completion: nil)

// Чтобы закрыть модальный экран изнутри него:
self.dismiss(animated: true, completion: nil)

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

  • Аватар

    iOS Guru

    Roman Isakov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    4

  • Сложность:

    3

Навыки

  • Swift

    Swift

  • IOS

    IOS

Ключевые слова

#iOS

#UIKit

#pushViewController

#presentViewController

#navigation controller

#modal presentation

Подпишись на iOS Developer в телеграм

  • Аватар

    iOS Guru

    Roman Isakov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.