如何解决按钮或图像上的Swift UI MacOS Popover
我希望我可以做图片中所示的事情。
我正在尝试使用这段代码,但是我不太了解如何解决它。
我希望可以在Button
或ImageMac
上使用它,它应该是图像。
有人可以帮我吗?
代码:
func showLittlePopoverWithMessage(sender: NSView,message: String) {
let controller = NSViewController()
controller.view = NSView(frame: CGRect(x: CGFloat(100),y: CGFloat(50),width: CGFloat(100),height: CGFloat(50)))
let popover = NSPopover()
popover.contentViewController = controller
popover.contentSize = controller.view.frame.size
popover.behavior = .transient
popover.animates = true
let invisibleWindow = NSWindow(contentRect: NSMakeRect(0,20,5),styleMask: .borderless,backing: .buffered,defer: false)
invisibleWindow.backgroundColor = .red
invisibleWindow.alphaValue = 0
//controller.view.addSubview(sender)
popover.show(relativeTo: sender.bounds,of: sender as! NSView,preferredEdge: .maxY)
}
#if os(macOS)
struct ImageMac: View {
let symbol: String
init(systemName: String) {
self.symbol = [
"star": "☆","star.fill": "★","heart": "?","heart.fill": "?","video": "?","lock.fill": "?","lock.open.fill": "?","checkmark.seal.fill": "?"
][systemName] ?? "?"
}
var body: some View { Text(symbol) }
}
#endif
ImageMac(systemName: "checkmark.seal.fill").foregroundColor(.blue)
Button(action: {}) {
Text("Button")
}
解决方法
这里是可行方法的演示。用Xcode 11.7 / macOS 10.15.6编写并测试
struct ContentView: View {
@State var isPopover = false
var body: some View {
VStack {
Button(action: { self.isPopover.toggle() }) {
Image(nsImage: NSImage(named: NSImage.infoName) ?? NSImage())
}.popover(isPresented: self.$isPopover,arrowEdge: .bottom) {
PopoverView()
}.buttonStyle(PlainButtonStyle())
}.frame(width: 800,height: 600)
}
}
struct PopoverView: View {
var body: some View {
VStack {
Text("Some text here ").padding()
Button("Resume") {
}
}.padding()
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。