按钮或图像上的SWIFT UI MacOS弹出窗口

本文展示了如何在SwiftUI的MacOS应用中创建和显示一个Popover,特别是在Button或自定义视图ImageMac上。代码示例包括初始化Popover、设置内容和行为,以及如何在Button点击时展示Popover。同时,文章提供了一个可能的解决方案来演示正确的Popover用法。

我希望我能做图片中看到的事情。

我正在尝试使用这段代码,但我不太了解怎么修复它。

我希望我可以在Button或ImageMac上使用它,该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, 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()

    }

}

好了关于按钮或图像上的SWIFT UI MacOS弹出窗口的教程就到这里就结束了,希望趣模板源码网找到的这篇技术文章能帮助到大家,更多技术教程可以在站内搜索。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值