我在
UIAction
和 UIMenu
中拥有一个名为“添加到收藏夹”的 UIContextMenuConfiguration
,用于 UITableView
的单元格。我想在下次菜单显示为“从收藏夹中删除”时更改菜单。但是,我了解到 UIMenu
是不可变的。
如何实现动态更新菜单的目标?
@objc extension UIMenu {
/// Recalculates menu on every appearance (e.g. when assigning to UIButtons as primary action)
static func lazyMenu(builder: @escaping () -> UIMenu) -> UIMenu {
return UIMenu(children: [
// rebuild menu every time menu is accessed
UIDeferredMenuElement.uncached { completion in
let menu = builder()
completion([menu])
}
])
}
}
确保从构建器块返回的菜单包含 .displayInline:例如
UIMenu(options: .displayInline, children: myMenuItems)