4

我想将带有条件菜单子项的 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 或任何错误?

4

1 回答 1

0

我也偶然发现了这一点。由于某种原因,使用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}
   ])
}

我希望这可以帮助任何需要它的人。

于 2022-02-11T12:31:05.280 回答