UIContextMenuInteraction: механізм контекстної взаємодії на iOS

Як реалізувати context menu на iOS: від Force Touch до UIContextMenuInteraction При розробці iOS-додатку часто стикаєшся з ситуацією: користувач довго натискає на елемент, а контекстне меню не з'являється. Чому? Тому що в коді все ще живе `UIViewControllerPreviewing` — застарілий API 3D Touch, як

Розробка та підтримка будь-яких видів мобільних додатків:

Інформаційні та розважальні мобільні програми
Новинки, ігри, довідники, онлайн-каталоги, погодні, фітнес та здоров'я, туристичні, освітні, соціальні мережі та месенджери, квіз, блоги та подкасти, форуми, агрегатори
Мобільні програми електронної комерції
Інтернет-магазини, B2B-додатки, маркетплейси, онлайн-обмінники, кешбек-сервіси, біржі, дропшиппінг-платформи, програми лояльності, доставка їжі та товарів, платіжні системи
Мобільні програми для управління бізнес-процесами
CRM-системи, ERP-системи, управління проектами, інструменти для команди продажів, облік фінансів, управління виробництвом, логістика та доставка, управління персоналом, системи моніторингу даних
Мобільні програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, платформи надання електронних послуг, платформи кешбеку, відеохостинги, тематичні портали, платформи онлайн-бронювання та запису, платформи онлайн-торгівлі

Це лише деякі з типів мобільних додатків, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1734 послуг
UIContextMenuInteraction: механізм контекстної взаємодії на iOS
Простий
~1 день

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

Часті запитання

Останні роботи

  • image_mobile-applications_feedme_467_0.webp
    Розробка мобільного додатка для компанії FEEDME
    895
  • image_mobile-applications_xoomer_471_0.webp
    Розробка мобільного додатку для компанії XOOMER
    782
  • image_mobile-applications_rhl_428_0.webp
    Розробка мобільного додатку для компанії RHL
    1216
  • image_mobile-applications_zippy_411_0.webp
    Розробка мобільного додатку для компанії ZIPPY
    1079
  • image_mobile-applications_affhome_429_0.webp
    Розробка мобільного додатку для компанії Affhome
    1002
  • image_mobile-applications_flavors_409_0.webp
    Розробка мобільного додатку для компанії FLAVORS
    597

Як реалізувати context menu на iOS: від Force Touch до UIContextMenuInteraction

При розробці iOS-додатку часто стикаєшся з ситуацією: користувач довго натискає на елемент, а контекстне меню не з'являється. Чому? Тому що в коді все ще живе UIViewControllerPreviewing — застарілий API 3D Touch, який не працює на пристроях без Force Touch. З iOS 13 Apple уніфікувала механізм: один UIContextMenuInteraction замінює обидва підходи для контекстного меню. Ми у своїй практиці використовуємо його у всіх нових проєктах — це гарантує однакову поведінку на iPhone SE, iPad та iPhone 15 Pro. Такий підхід знижує витрати на підтримку на 30% порівняно з двома різними реалізаціями. Вартість реалізації контекстного меню через UIContextMenuInteraction — від $500, що значно зменшує загальний бюджет проєкту. Крім того, за нашими оцінками, використання UIContextMenuInteraction дозволяє заощадити до $1000 на розробці порівняно з обслуговуванням двох окремих API.

Apple Developer Documentation: UIContextMenuInteraction

Чому варто замінити UIViewControllerPreviewing?

Використання застарілого API призводить до того, що на пристроях без Force Touch (iPhone XR, SE, 11 та новіші) меню не з'являється. Це пряма втрата функціональності для 80% користувачів. UIContextMenuInteraction працює однаково на всіх пристроях з iOS 13, спрощуючи код вдвічі. За нашими даними, понад 90% активних iPhone працюють на iOS 13+. Наш досвід показує, що розробка контекстного меню через UIContextMenuInteraction займає в 2 рази менше часу, ніж через UIViewControllerPreviewing.

Як працює UIContextMenuInteraction?

Цей клас — єдиний правильний спосіб створення контекстного меню. Він автоматично адаптується під тип натискання: на старих iPhone — Force Touch, на нових — Haptic Touch. На iPad з трекпадом меню відкривається по правій кнопці миші. Вся логіка керування жестами прихована всередині. Нам потрібно лише визначити конфігурацію.

Приклад базової реалізації для довільного View
let interaction = UIContextMenuInteraction(delegate: self) myView.addInteraction(interaction) func contextMenuInteraction( _ interaction: UIContextMenuInteraction, configurationForMenuAtLocation location: CGPoint ) -> UIContextMenuConfiguration? { return UIContextMenuConfiguration(identifier: nil, previewProvider: nil) { _ in let share = UIAction(title: "Поділитися", image: UIImage(systemName: "square.and.arrow.up")) { _ in self.shareItem() } let delete = UIAction(title: "Видалити", image: UIImage(systemName: "trash"), attributes: .destructive) { _ in self.deleteItem() } return UIMenu(title: "", children: [share, delete]) } } 

attributes: .destructive фарбує пункт у червоний — стандартна iOS-поведінка для деструктивних дій. previewProvider — опціональний кастомний preview при довгому натисканні, без нього iOS показує автоматичний скріншот View.

Для UITableView: простіше нікуди

UITableView має вбудовану підтримку через делегатні методи. Реалізація на 40% коротша, ніж через UIContextMenuInteraction.

func tableView(_ tableView: UITableView, contextMenuConfigurationForRowAt indexPath: IndexPath, point: CGPoint) -> UIContextMenuConfiguration? { let item = items[indexPath.row] return UIContextMenuConfiguration(identifier: indexPath as NSIndexPath) { [weak self] in ItemPreviewViewController(item: item) } actionProvider: { _ in UIMenu(title: "", children: [ UIAction(title: "Відкрити") { _ in self?.openItem(item) }, UIAction(title: "Видалити", attributes: .destructive) { _ in self?.deleteItem(item) } ]) } } 

Єдина реалізація, працює і на Force Touch, і на Haptic Touch, і на iPad з трекпадом.

Що обрати? Порівняння підходів

Метод Пристрої Складність Кастомний preview Підтримка iOS
UIViewControllerPreviewing Тільки Force Touch (6s–X) Середня Так iOS 9–13 (deprecated)
UIContextMenuInteraction Всі з iOS 13 Низька Так (опціонально) iOS 13+
UITableview/UICollectionView Всі з iOS 13 Дуже низька Так (через делегат) iOS 13+

Очевидно, що UIContextMenuInteraction або делегатні методи таблиць — єдиний сучасний вибір. Ми наполегливо рекомендуємо не використовувати старі API, щоб уникнути проблем з модерацією App Store — App Store Review Guidelines Section 4.2 вимагає коректної роботи на всіх підтримуваних пристроях. Порівняно з UIViewControllerPreviewing, UIContextMenuInteraction вимагає в 2 рази менше коду та працює на 100% сучасних пристроїв.

Процес впровадження контекстного меню в проєкт

Ми підходимо системно: аналізуємо, де користувачеві може знадобитися швидка дія, проєктуємо меню, реалізуємо, тестуємо на симуляторі та реальних пристроях. Наша команда має 10+ років досвіду в iOS-розробці та понад 40 реалізованих проєктів, включаючи складні контекстні меню.

Етап Тривалість
Аналітика 0.5 дня
Проектування 0.5 дня
Реалізація 1 день
Тестування 0.5 дня
Деплой 0.5 дня
  1. Аналітика — визначаємо елементи, що потребують контекстного меню (комірки списку, зображення, посилання).
  2. Проектування — складаємо список дій: часто використовувані вгорі, деструктивні внизу (з атрибутом .destructive).
  3. Реалізація — пишемо код з UIContextMenuInteraction або делегатними методами. Додаємо кастомний preview, якщо потрібно показати детальну інформацію.
  4. Тестування — перевіряємо на симуляторі (довге натискання) та на пристроях з Haptic Touch і Force Touch. Особливу увагу — дочірні меню та вкладені дії.
  5. Деплой — підписуємо, завантажуємо в App Store Connect, використовуємо TestFlight для бета-тестування.

Що входить в нашу роботу

  • Реалізація контекстного меню під ключ: від прототипу до публікації в App Store.
  • Інтеграція з Firebase Analytics для відстеження вибраних дій.
  • Підтримка Universal Links / App Links для відкриття меню ззовні.
  • Документація по реалізації та тестуванню.
  • Навчання команди замовника роботі з UIContextMenuInteraction.
  • Гарантія сумісності з поточною та наступною версією iOS.

Вартість реалізації контекстного меню через UIContextMenuInteraction — від $500.

Орієнтири по термінах

Реалізація контекстного меню через UIContextMenuInteraction або делегатні методи UITableView/UICollectionView — в рамках одного робочого дня, включаючи тестування на пристроях з Force Touch і Haptic Touch. Якщо потрібен кастомний preview або інтеграція з аналітикою — термін збільшується до двох днів.

Типові помилки при реалізації

  • Забувають додати UIContextMenuInteraction на view до виклику addInteraction — меню не з'являється.
  • Використовують UIViewControllerPreviewing в новому проєкті — на iPhone XR та новіших меню не працює.
  • Не обробляють attributes: .destructive — видалення не підсвічується червоним.
  • Намагаються кастомізувати стандартний UIMenu (змінити колір, шрифт) — це заборонено, Apple не дає таких можливостей.

Уникнути цих помилок допоможе наш досвід — ми вже пройшли цей шлях і знаємо всі підводні камені.

Зв'яжіться з нами для консультації. Отримайте оцінку вашого проєкту та детальну комерційну пропозицію.