Для отключения контекстного меню в iOS 13 вам потребуется использовать новый API, представленный Apple - UIContextMenuInteractionDelegate
.
Во-первых, вам нужно добавить протокол UIContextMenuInteractionDelegate
к вашему представлению (обычно это UIView
или UIViewController
). Это можно сделать путем расширения с помощью данного протокола:
extension YourViewOrController: UIContextMenuInteractionDelegate { // ваши реализации методов делегата }
Затем вы можете добавить объект UIContextMenuInteraction
к вашему представлению. Вам нужно будет создать экземпляр UIContextMenuInteraction
, установить его в качестве делегата и добавить его к вашему представлению. Подобно следующему:
let interaction = UIContextMenuInteraction(delegate: self) yourViewOrController.addInteraction(interaction)
Теперь вам нужно реализовать методы делегата UIContextMenuInteractionDelegate
. Самые важные методы - это contextMenuConfigurationForLocation
и willPerformPreviewActionForMenu
.
Метод contextMenuConfigurationForLocation
вызывается, когда пользователь долгим нажатием вызывает контекстное меню. В этом методе вы должны вернуть объект UIContextMenuConfiguration
, который будет определять содержимое и поведение контекстного меню. Если вы хотите отключить контекстное меню, просто верните значение nil
из этого метода:
func contextMenuConfigurationForLocation(in _, interaction: UIContextMenuInteraction) -> UIContextMenuConfiguration? { return nil }
Метод willPerformPreviewActionForMenu
вызывается, когда пользователь выбирает опцию в контекстном меню. Если вы не хотите выполнять какие-либо действия, просто оставьте этот метод пустым.
Вот полный пример:
extension YourViewOrController: UIContextMenuInteractionDelegate { func contextMenuConfigurationForLocation(in _, interaction: UIContextMenuInteraction) -> UIContextMenuConfiguration? { return nil } // Можно оставить этот метод пустым, если не нужно выполнять какие-либо действия в контекстном меню. func willPerformPreviewActionForMenu(_ _, with _, animator: UIContextMenuInteractionCommitAnimating) {} } let interaction = UIContextMenuInteraction(delegate: self) yourViewOrController.addInteraction(interaction)
Теперь контекстное меню не будет показываться при долгом нажатии на вашем представлении.