对于这样的视图,我有一个contextMenu视图修饰符:
Text("Some Text")
.contextMenu {
Button(action: {
editCodes(withTappedCode: codeOnDisplay, delete: true)
}, label: {
Text("Paste")
Image(systemName: "doc.on.clipboard")
})
.disabled(!UIPasteboard.general.contains(pasteboardTypes: [aPAsteBoardType]))
}
仅当特定的“粘贴板类型”可用时,才应启用该按钮。但是,这不会发生。
当按钮的上下文菜单首次显示时,将设置为禁用状态。此后,即使关闭并再次打开菜单,对粘贴板的任何更改也不会修改禁用状态。
这似乎只有在以任何方式刷新修改后的视图时才会发生。
如何使用“粘贴板”类型更改上下文菜单按钮的禁用状态?
答案 0 :(得分:0)
您可以收听UIPasteboard.changedNotification
来检测更改并刷新视图:
struct ContentView: View {
@State private var pasteDisabled = false
var body: some View {
Text("Some Text")
.contextMenu {
Button(action: {}) {
Text("Paste")
Image(systemName: "doc.on.clipboard")
}
.disabled(pasteDisabled)
}
.onReceive(NotificationCenter.default.publisher(for: UIPasteboard.changedNotification)) { _ in
pasteDisabled = !UIPasteboard.general.contains(pasteboardTypes: [aPAsteBoardType])
}
}
}
(您可能还想使用UIPasteboard.removedNotification
)。