Я установил UIButton как rightBarButtonItem в UIViewController внутри UINavigationController и связал с ним контекстное меню iOS13.
Как и ожидалось, долгое нажатие на кнопку показывает контекстное меню.
Есть ли способ показать контекстное меню, нажав кнопку (например, добавив цель для события .touchUpInside)?
Кнопка / barButtonItem настраивается следующим образом:
let button = UIButton(type: .system)
button.setImage(UIImage(systemName: "plus"), for: .normal)
let barButton = UIBarButtonItem(customView: button)
self.navigationItem.rightBarButtonItem = barButton
let interaction = UIContextMenuInteraction(delegate: self)
button.addInteraction(interaction)
Контекстное меню определяется следующим образом:
extension ViewController: UIContextMenuInteractionDelegate {
func contextMenuInteraction(_ interaction: UIContextMenuInteraction, configurationForMenuAtLocation location: CGPoint) -> UIContextMenuConfiguration? {
return UIContextMenuConfiguration(identifier: nil, previewProvider: nil) { suggestedActions in
let importAction = UIAction(title: "Import", image: UIImage(systemName: "folder")) { action in }
let createAction = UIAction(title: "Create", image: UIImage(systemName: "square.and.pencil")) { action in }
return UIMenu(title: "", children: [importAction, createAction])
}
}
}
UIMenuController
с библиотекойPSMenuItem
, хотя имитацияUIContextMenu
была бы предпочтительнее tbh. - person Ivan Cantarino   schedule 05.05.2020