【发布时间】:2019-09-01 09:31:34
【问题描述】:
我在 UINavigationController 内的 UIViewController 中将 UIButton 设置为 rightBarButtonItem,并将 iOS13 上下文菜单关联到它。
长按按钮会按预期显示上下文菜单。
有没有办法通过点击按钮来显示上下文菜单(例如,通过为 .touchUpInside 事件添加目标)?
button/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])
}
}
}
【问题讨论】:
-
@IvanCantarino 运气好吗?我知道 UIKit 管理与上下文菜单的所有交互,但是还有其他可以以编程方式触发的 UIKit 管理元素的示例。您可能可以(以编程方式)模拟长按,但我正在寻找更优雅的解决方案(即只需调用屏幕上的位置来呈现它)。
-
好吧,因为我一直在为 Mac Catalyst 应用程序寻找类似的东西,所以我设法将
UIMenuController与库PSMenuItem一起使用,尽管模拟UIContextMenu会更好待定。 -
我来更新我的答案,提到 iOS 14 中的新增功能,发现您已经更新了您的问题:)。我只是建议将其添加为您自己问题的新答案,以及that's totally fine。
标签: ios contextmenu ios13 popupmenu ios14