我正在开发一个带有自定义文件浏览器的应用程序,目前我正在实现复制/粘贴。我在导航栏中附加了一个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)
然而这仍然没有任何作用。我是否缺少一些我需要调用的更新功能?或者我无法在加载视图后修改导航栏按钮的菜单?