2

我正在开发一个带有自定义文件浏览器的应用程序,目前我正在实现复制/粘贴。我在导航栏中附加了一个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)

这也不起作用。最后,我尝试创建一个 new 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)

然而这仍然没有任何作用。我是否缺少一些我需要调用的更新功能?或者我无法在加载视图后修改导航栏按钮的菜单?

4

0 回答 0