Get an event when UIBarButtonItem menu is displayed(显示UIBarButtonItem菜单时获取事件)
本文介绍了显示UIBarButtonItem菜单时获取事件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我们都知道如何简单地点击一个栏按钮项来显示菜单(在iOS 14中引入):
let act = UIAction(title: "Howdy") { act in
print("Howdy")
}
let menu = UIMenu(title: "", children: [act])
self.bbi.menu = menu // self.bbi is the bar button item
到目前为止,一切顺利。但是,当轻触栏按钮项时,显示菜单并不是我唯一想做的事情。只要菜单还在显示,我就需要暂停游戏计时器,以此类推。因此,我需要获取一个事件,通知我按钮已被点击。
我不希望此Tap事件与菜单的产生不同;例如,我不想将目标和操作附加到我的按钮,因为如果我这样做,那么菜单产生就是一个不同的事情,只有当用户长时间按下按钮时才会发生。我希望菜单显示在点击上,和会收到一个事件,告诉我正在发生这种情况。
这肯定是一个常见的问题,那么人们是如何解决它的?
推荐答案
我能找到的唯一方法是使用UIDeferredMenuElement
轻触菜单执行某些操作。然而,问题是您必须重新创建整个菜单,并将其再次分配给延迟菜单元素的elementProvider
块中的栏按钮项,以便获得未来的点击事件,如您在下面的玩具示例中所见:
class YourViewController: UIViewController {
func menu(for barButtonItem: UIBarButtonItem) -> UIMenu {
UIMenu(title: "Some Menu", children: [UIDeferredMenuElement { [weak self, weak barButtonItem] completion in
guard let self = self, let barButtonItem = barButtonItem else { return }
print("Menu shown - pause your game timers and such here")
// Create your menu's real items here:
let realMenuElements = [UIAction(title: "Some Action") { _ in
print("Menu action fired")
}]
// Hand your real menu elements back to the deferred menu element
completion(realMenuElements)
// Recreate the menu. This is necessary in order to get this block to
// fire again on future taps of the bar button item.
barButtonItem.menu = self.menu(for: barButtonItem)
}])
}
override func viewDidLoad() {
super.viewDidLoad()
let someBarButtonItem = UIBarButtonItem(systemItem: .done)
someBarButtonItem.menu = menu(for: someBarButtonItem)
navigationItem.rightBarButtonItem = someBarButtonItem
}
}
此外,从iOS 15开始,在UIDeferredMenuElement
上有一个名为uncached(_:)
的类方法,它创建一个延迟的Menu元素,该元素在每次点击栏按钮项时触发其elementProvider
块,而不是只触发第一次,这意味着您不必像上例中那样重新创建菜单。
这篇关于显示UIBarButtonItem菜单时获取事件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:显示UIBarButtonItem菜单时获取事件
基础教程推荐
猜你喜欢
- EditText 中的 setHintTextColor() 2022-01-01
- 更改 UITableView 部分标题的颜色 2022-01-01
- UINavigationItem 的持久 rightBarButtonItem 属性 2022-01-01
- 在视图控制器的宽度上水平均匀分布 UIButton 的最简单方法? 2022-01-01
- Firebase 云消息传递令牌未生成 2022-01-01
- iOS4 创建后台定时器 2022-01-01
- Android - 如何在runOnUiThread 中将数据传递给Runnable? 2022-01-01
- 在 iOS 7 下 CCMenu 错位 2022-01-01
- UINavigationBar 隐藏按钮文本 2022-01-01
- 从 UIWebView 访问元数据 2022-01-01