ios14 - iOS 14 UIMenu 替换Children 不起作用
问题描述
我想将带有条件菜单子项的 UIMenu 添加到 iOS14 上的 UIButton 菜单中,但 replaceChildren 不起作用。
self.button.menu = UIMenu( options: .displayInline, children:[
UIAction(title:"Action 1"){_ in},
UIAction(title:"Action 2"){_ in}
])
//Try to update menu's children but it does not work
self.button.menu = self.button.menu?.replacingChildren([
UIAction(title:"Action 3"){_ in},
UIAction(title:"Action 4"){_ in}
])
菜单不变。我需要使用新的子项创建一个全新的 UIMenu 实例并将其分配给 self.button.menu。如何使用 replaceChildren 或任何错误?
解决方案
我也偶然发现了这一点。由于某种原因,使用replacingChildren
导致 iOS 14 上的子数组未更改。对于 iOS 15,行为符合预期。
但是,我可以通过设置一个新实例UIMenu
来解决这个问题。
在您的情况下,请致电:
self.button.menu = UIMenu(options: .displayInline, children:[
UIAction(title:"Action 3"){_ in},
UIAction(title:"Action 4"){_ in}
])
由于这不是最好的解决方案,而且(对我而言)它仅适用于 iOS 14,您可能只想在需要时使用它:
if #available(iOS 15.0, *) {
self.button.menu = self.button.menu?.replacingChildren([
UIAction(title:"Action 3"){_ in},
UIAction(title:"Action 4"){_ in}
])
} else {
self.button.menu = UIMenu(options: .displayInline, children:[
UIAction(title:"Action 3"){_ in},
UIAction(title:"Action 4"){_ in}
])
}
我希望这可以帮助任何需要它的人。