我想从UIBarButtonItem
显示一个菜单,但只有当点击按钮时运行时检查成功,否则显示一个警报。
快速背景。我有一些旧的代码(在UIMenu之前),用一个目标/操作来处理UIBarButtonItem
,该目标/操作将执行检查,然后显示一个警报或呈现一个操作表。
我正在尝试更新该代码以使用UIMenu
而不是操作表(UIAlertController
)。我知道如何用UIMenu
创建UIBarButtonItem
。这很容易实现。
我在SO上的任何API或任何搜索中都找不到的是如何手动显示UIMenu
。
下面是我的代码的一个粗略示例,它直接显示了UIBarButtonItem
中的菜单:
btnAdd = UIBarButtonItem(systemItem: .add, menu: UIMenu(children: [
// An array of UIAction instances for each menu item
]))
该代码工作得很好,但我需要更改它,使菜单只出现在正确的条件下。我正在考虑类似于下面的内容,但我不知道如何编写手动显示UIMenu
的代码行。
btnAdd = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(addAction))
...
@objc func addAction(_ sender: UIBarButtonItem) {
if someRuntimeCondition == true {
let menu = UIMenu(children: [
// An array of UIAction instances for each menu item
])
??? // How to display menu from sender?
} else {
// Create and display an alert
}
}
我觉得我错过了一些简单而明显的东西,但我就是看不出来。
我已经查看了UIMenu
、UIBarButtonItem
、UIContextMenuInteraction
和UIMenuController
的文档(已弃用)。这些似乎都没有提供从UIBarButtonItem
手动显示菜单的方法。我还看了几个苹果的示例应用程序。
任何解决方案都需要与iOS 15.0+配合使用。
1条答案
按热度按时间cgvd09ve1#
当我发现了一个使用
UIDeferredMenuElement.uncached
的棘手解决方案时,我离点击提交我的问题只有几秒钟。这并没有回答如何从UIBarButtonItem
手动显示UIMenu
的问题,但这确实实现了我的最终目标,即当点击UIBarButtonItem
时,有条件地显示警报或菜单。