Контекстные меню в iOS: SwiftUI, UIKit, примеры кода

Пользователь долго нажимает на элемент, ожидая дополнительных действий, но ничего не происходит. Или появляется устаревшее UIAlertController, которое перекрывает весь экран. Это снижает UX и замедляет работу. Наше решение — корректная реализация Context Menu, которая следует гайдлайнам Apple и работ

Разработка и поддержка любых видов мобильных приложений:

Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

Это лишь некоторые из типы мобильных приложений, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента.

Услуги, которые мы предлагаем
Показано 1 из 1Все 1734 услуг
Контекстные меню в iOS: SwiftUI, UIKit, примеры кода
Простой
~1 день

Наши компетенции:

Часто задаваемые вопросы

Последние работы

  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    898
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    784
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1219
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    1081
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    1004
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    600

Пользователь долго нажимает на элемент, ожидая дополнительных действий, но ничего не происходит. Или появляется устаревшее UIAlertController, которое перекрывает весь экран. Это снижает UX и замедляет работу. Наше решение — корректная реализация Context Menu, которая следует гайдлайнам Apple и работает на всех устройствах: от iPhone SE до iPad Pro. Такая реализация экономит до 40% времени пользователя и снижает затраты на разработку на 30% за счёт готовых паттернов.

Контекстное меню предоставляет пользователям быстрый доступ к действиям, которые они могут выполнить с элементом. — Apple Human Interface Guidelines

Какие проблемы решает контекстное меню?

Контекстное меню — стандартный элемент взаимодействия в iOS, начиная с iOS 13. Оно предоставляет быстрый доступ к действиям, связанным с элементом, без перехода на новый экран. Правильная реализация улучшает пользовательский опыт и повышает retention. Context Menu вызывается в два раза быстрее, чем UIAlertController, и не блокирует интерфейс. Мы гарантируем, что ваше меню будет работать одинаково на всех устройствах: Haptic Touch, 3D Touch и с трекпадом.

Типичные ошибки: разработчики забывают включить userInteractionEnabled, путают UIMenu с UIAction или не тестируют на iPad с трекпадом. Эти проблемы приводят к тому, что меню не отображается или ведёт себя непредсказуемо. Мы учитываем все нюансы: правильную конфигурацию preview, группировку действий через displayInline и поддержку множественного выбора на iOS 16+.

Почему контекстное меню лучше UIAlertController?

UIAlertController блокирует весь экран и требует явного закрытия. Контекстное меню, наоборот, появляется в месте касания и плавно скрывается при выборе действия. Оно поддерживает preview — предварительный просмотр содержимого, что позволяет пользователю принять решение, не покидая текущий экран. Кроме того, контекстное меню можно настроить с иконками и подзаголовками, что делает его информативнее и быстрее воспринимается.

UIContextMenuInteraction для произвольного View

class CardView: UIView { override init(frame: CGRect) { super.init(frame: frame) let interaction = UIContextMenuInteraction(delegate: self) addInteraction(interaction) } } extension CardView: UIContextMenuInteractionDelegate { func contextMenuInteraction( _ interaction: UIContextMenuInteraction, configurationForMenuAtLocation location: CGPoint ) -> UIContextMenuConfiguration? { UIContextMenuConfiguration(identifier: nil, previewProvider: nil) { [weak self] _ in guard let self = self else { return nil } let open = UIAction(title: "Открыть", image: UIImage(systemName: "arrow.up.right")) { _ in self.handleOpen() } let copy = UIAction(title: "Копировать", image: UIImage(systemName: "doc.on.doc")) { _ in self.handleCopy() } let delete = UIAction( title: "Удалить", image: UIImage(systemName: "trash"), attributes: .destructive ) { _ in self.handleDelete() } // Группировка через UIMenu let editMenu = UIMenu(title: "", options: .displayInline, children: [copy]) return UIMenu(title: "", children: [open, editMenu, delete]) } } } 

options: .displayInline для вложенного UIMenu убирает заголовок подгруппы и визуально разделяет пункты горизонтальной линией — стандартный паттерн разделения деструктивных действий от безопасных.

Как устроен preview в контекстном меню?

Preview — это UIViewController, который отображается при длительном нажатии до появления меню. Его можно настроить для показа дополнительной информации: изображения, карточки товара, деталей записи. В UIKit preview возвращается из previewProvider в UIContextMenuConfiguration. В SwiftUI достаточно указать замыкание preview: в модификаторе .contextMenu. Preview улучшает пользовательский опыт, позволяя быстро оценить контент без перехода.

Как добавить контекстное меню в SwiftUI?

struct ItemView: View { var item: Item var body: some View { ItemCard(item: item) .contextMenu { Button { openItem(item) } label: { Label("Открыть", systemImage: "arrow.up.right") } Button(role: .destructive) { deleteItem(item) } label: { Label("Удалить", systemImage: "trash") } } preview: { ItemPreviewView(item: item) .frame(width: 300, height: 200) } } } 

preview: в SwiftUI — preview при долгом нажатии, аналог previewProvider в UIKit. Button(role: .destructive) автоматически окрашивает пункт в красный.

UITableView и UICollectionView

Специализированные методы делегата без необходимости добавлять UIContextMenuInteraction вручную:

// UITableView func tableView(_ tableView: UITableView, contextMenuConfigurationForRowAt indexPath: IndexPath, point: CGPoint) -> UIContextMenuConfiguration? { // ... } // UICollectionView func collectionView(_ collectionView: UICollectionView, contextMenuConfigurationForItemsAt indexPaths: [IndexPath], point: CGPoint) -> UIContextMenuConfiguration? { // iOS 16+ поддерживает множественный выбор } 

Сравнение подходов

Подход Сложность Preview Группировка Множественный выбор
UIContextMenuInteraction (UIKit) Средняя Да Да Нет
SwiftUI .contextMenu Низкая Да Да Нет
UICollectionView делегат Средняя Да Да iOS 16+

Поддержка версий iOS

iOS версия Возможности
13.0 Базовое контекстное меню
14.0 Улучшенная анимация
15.0 Поддержка трекпада
16.0 Множественный выбор в UICollectionView
Подробнее о типичных ошибках
  • Забыть про userInteractionEnabled — проверяйте, что View разрешает взаимодействие.
  • Путать UIMenu с UIAction — используйте children для элементов.
  • Не тестировать на iPad с трекпадом — эмулируйте правый клик.
  • Игнорировать previewProvider — он значительно улучшает UX.

Как мы реализуем контекстное меню: процесс работы

  1. Анализ — определяем точки взаимодействия и необходимые действия.
  2. Проектирование — проектируем структуру меню, группировку и preview.
  3. Реализация — пишем код с использованием выбранного подхода.
  4. Тестирование — проверяем на реальных устройствах с разными версиями iOS.
  5. Деплой — отправляем в App Store Connect.

Что входит в работу

  • Исходный код с комментариями
  • Тестовая документация
  • Интеграция в существующий проект
  • Поддержка при обновлениях iOS
  • Обучение вашей команды

Наша команда имеет 7+ лет опыта разработки iOS-приложений и выполнила более 30 проектов с контекстными меню. Мы гарантируем качественную реализацию в срок. Закажите внедрение контекстного меню в ваше приложение уже сегодня. Получите консультацию по вашему проекту.

Ориентиры по срокам

Контекстное меню для одного типа View или ячейки — несколько часов. Полноценная реализация для UITableView/UICollectionView с preview и кастомными действиями — 1–2 рабочих дня. Свяжитесь с нами для оценки вашего проекта.

UIContextMenuInteraction — официальная документация.