Как я могу изменить UIAction UIMenu, прикрепленного к кнопке панели навигации?
Я работаю над приложением с настраиваемым файловым браузером, и в настоящее время я работаю над реализацией копирования / вставки. У меня есть кнопка на панели навигации, к которой я прикрепил
UIMenu
в, чтобы показать варианты добавления файлов, включая вставку. Я хочу, чтобы кнопка вставки автоматически включалась, когда файлы находятся в буфере обмена, и отключалась, когда буфер обмена пуст. Сначала я попробовал это сделать:
// in class definition
var pasteAction: UIAction?
@IBOutlet var addButton: UIBarButtonItem!
// in viewDidLoad()
pasteAction = UIAction(
title: "Paste Files",
image: UIImage(systemName: "doc.on.clipboard"),
attributes: clipboard.isEmpty ? .disabled : [],
handler: pasteFiles
)
addButton.menu = UIMenu(
title: "", image: nil, identifier: nil, options: .displayInline,
children: [folder, file, imp, pasteAction!]
)
// in copy()
pasteAction!.attributes = clipboard.isEmpty ? .disabled : []
Однако кнопка вставки осталась неактивной. (При выходе из контроллера представления и повторном входе в него включается кнопка вставки.) Я также попытался заменить меню новым с теми же дочерними элементами:
pasteAction!.attributes = clipboard.isEmpty ? .disabled : []
var c = Array(addButton.menu!.children[0...2])
c.append(pasteAction!)
addButton.menu = addButton.menu!.replacingChildren(c)
Это тоже не сработало. Наконец, я попытался создать новый
UIAction
, на всякий случай изменить его на самом деле невозможно:
var c = Array(addButton.menu!.children[0...2])
c.append(UIAction(
title: "Paste Files",
image: UIImage(systemName: "doc.on.clipboard"),
attributes: FilesViewController.clipboard.isEmpty ? .disabled : [],
handler: pasteFiles
))
addButton.menu = addButton.menu!.replacingChildren(c)
Но это все равно ничего не дает. Мне не хватает какой-то функции обновления, которую мне нужно вызвать? Или я не могу изменить меню для кнопки панели навигации после загрузки представления?