如何解决iOS 14在打开之前设置UIBarButttonItem菜单
由于iOS14提供了一种简便的方法来设置UIBarButtonItem
上的菜单,我想知道我没有想到没有简单的方法来设置其菜单项,因为它们可能取决于当前上下文。
我看到有UIDeferredMenuElement
,但这似乎不是一个好用例?
我也看到有primaryAction
,但是似乎没有一种从那里调用菜单的简单方法。
第三个选项似乎是对可能影响它的每次更改重新调整菜单,但这似乎不是一个好主意。
我认为我错过了一些事情。
解决方法
基本上,对于简单的条形按钮项,没有这样的规定。像UIButton这样的UIControl都有一个事件.menuActionTriggered
,在那时,构造菜单并将其分配给控件是完全合理的,因此实现了一个动态菜单,该菜单是在菜单出现之前即刻构造的
但是您不能使用条形按钮项来做到这一点-除非它是其中包含UIButton的自定义视图条形按钮项。
否则,您需要做的是通过某种 other 机制观察周围的情况,并在每次条件改变时只需更改bar按钮项目的菜单。听起来像是屁股疼,但这可能是您唯一的选择。 (我想这就是您说的意思,“第三个选项似乎是在每次可能影响它的更改上重新组合菜单,但这似乎不是一个好主意。”)
我认为您的要求是合理的,没有准备金似乎有点可笑;如果您有很好的用例,建议您向Apple提出增强请求。
,这是 Swift 5 版本的实现,灵感来自 @matt 的答案。
private func setButton() {
button.menu = UIMenu() // Here must be a placeholder menu. As the menu won't show if button.menu is nil.
button.showsMenuAsPrimaryAction = true
button.addTarget(self,action: #selector(createMenu(_:)),for: .menuActionTriggered)
}
@objc private func createMenu(_ button:UIButton) {
...
}
这是目前唯一的解决方案。因为 func pressesBegan(_ presses: Set<UIPress>,with event: UIPressesEvent?)
不会每次都调用,除非您在按钮设置为 showsMenuAsPrimaryAction = true
时按住一段时间。
----编辑----
如果我的答案是正确的,那么马特就是如此。因为我的代码是基于他的想法。所以我一开始并不认为马特是错的。我只是觉得提问者对马特的回答有误解。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。