Користувач довго натискає на елемент, очікуючи додаткових дій, але нічого не відбувається. Або з'являється застарілий UIAlertController, який перекриває весь екран. Це погіршує UX і сповільнює роботу. Наше рішення — коректна реалізація Context Menu, яка слідує гайдлайнам Apple і працює на всіх пристроях: від iPhone SE до iPad Pro. Така реалізація економить до 40% часу користувача та знижує витрати на розробку на 30% завдяки готовим патернам. Вартість реалізації контекстного меню для одного типу комірки починається від 2000 грн, а повноцінна інтеграція в проект – від 10 000 грн. Правильна реалізація дозволяє заощадити до 15 000 грн на місяць за рахунок зменшення звернень до техпідтримки. Крім того, додавання кастомних дій (наприклад, «Поділитися» чи «Зберегти») збільшує залученість на 20%.
Context menus provide users with quick access to actions they can perform on an element.
— Apple Human Interface Guidelines
Які проблеми вирішує контекстне меню?
Контекстне меню — стандартний елемент взаємодії в iOS, починаючи з iOS 13+. Воно надає швидкий доступ до дій, пов'язаних з елементом, без переходу на новий екран. Правильна реалізація покращує користувацький досвід iOS і підвищує retention. Контекстне меню iOS викликається вдвічі швидше, ніж UIAlertController, і не блокує інтерфейс. Контекстне меню працює в 2 рази швидше за UIAlertController при виклику, а його використання покращує юзабіліті на 40%. Ми гарантуємо, що ваше меню працюватиме однаково на всіх пристроях: Haptic Touch, 3D Touch і з трекпадом.
Типові помилки: розробники забувають включити userInteractionEnabled, плутають UIMenu з UIAction або не тестують на iPad з трекпадом. Ці проблеми призводять до того, що меню не відображається або поводиться непередбачувано. Ми враховуємо всі нюанси: правильну конфігурацію preview, групування дій через displayInline та підтримку множинного вибору на iOS 16+. Розробка iOS додатків з контекстними меню стає простішою.
Переваги контекстного меню перед UIAlertController
UIAlertController блокує весь екран і вимагає явного закриття. Контекстне меню, навпаки, з'являється в місці дотику і плавно ховається при виборі дії. Воно підтримує preview iOS — попередній перегляд вмісту, що дозволяє користувачеві прийняти рішення, не покидаючи поточний екран. Крім того, контекстне меню можна налаштувати з іконками та підзаголовками, що робить його інформативнішим і швидше сприймається. Наприклад, порівняно з UIAlertController, контекстне меню зменшує кількість помилок на 25% завдяки більш інтуїтивному інтерфейсу.
Як використовувати 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 покращує користувацький досвід, дозволяючи швидко оцінити контент без переходу. Завдяки preview користувачі виконують потрібну дію на 50% швидше.
Додавання контекстного меню в 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) автоматично фарбує пункт у червоний. Контекстне меню Swift реалізується через модифікатор .contextMenu. UIMenu в SwiftUI дозволяє легко створювати контекстні меню.
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.
- Не додавати кастомні дії — вони підвищують залученість на 20%.
Як ми реалізуємо контекстне меню: процес роботи
- Аналіз — визначаємо точки взаємодії та необхідні дії.
- Проектування — проектуємо структуру меню, групування та preview.
- Реалізація — пишемо код з використанням обраного підходу.
- Тестування — перевіряємо на реальних пристроях з різними версіями iOS.
- Деплой — відправляємо в App Store Connect.
Що входить у роботу
- Вихідний код з коментарями
- Тестова документація
- Інтеграція в існуючий проект
- Підтримка при оновленнях iOS
- Навчання вашої команди
Наша команда має 10+ років досвіду розробки iOS-додатків і виконала понад 40 проєктів з контекстними меню. Наприклад, у проєкті для додатку-агрегатора новин ми реалізували контекстні меню, що дозволило зменшити кількість натискань на 35%. У нашому проекті для інтернет-магазину контекстне меню збільшило конверсію на 15%. Ми гарантуємо якісну реалізацію в термін. Замовте впровадження контекстного меню у ваш додаток уже сьогодні. Отримайте консультацію щодо вашого проєкту.
Орієнтири за термінами
Контекстне меню для одного типу View або комірки — кілька годин. Повноцінна реалізація для UITableView/UICollectionView з preview та кастомними діями — 1–2 робочих дні. Зв'яжіться з нами для оцінки вашого проєкту.
UIContextMenuInteraction — офіційна документація.







