iOS 14 UIMenu с заменой Детей не работает
Я хочу добавить UIMenu с дочерними элементами условного меню в меню UIButton на iOS14, но 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. Как использовать замену детям или какая-то ошибка?
1 ответ
Я тоже наткнулся на это. Почему-то используется
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}
])
}
Я надеюсь, что это может помочь тому, кто в этом нуждается.