gpt4 book ai didi

macos - 以编程方式关闭 SwiftUI 中的弹出窗口

转载 作者:行者123 更新时间:2023-12-02 19:41:02 25 4
gpt4 key购买 nike

我尝试通过设置变量来关闭弹出窗口,将其显示为 false。

示例代码的行为很奇怪。有没有更好的方法来使用取消按钮以编程方式关闭弹出窗口?

import SwiftUI

struct ContentView: View {
let lines = ["line 1", "line 2","line 3"]
var body: some View {
List {
ForEach(lines, id: \.self)
{ Line(text: $0)
}
}
}
}

struct Line: View {
@State var text: String
@State var showSheet = false

var body: some View {
VStack
{ Text("\(text)")
.onTapGesture {
self.showSheet = true
}
}.popover( isPresented: self.$showSheet,
arrowEdge: .trailing
)
{ Pop(showSheet: self.$showSheet)
}
}
}

struct Pop: View {
@Binding var showSheet: Bool

var body: some View {
VStack {
Text("Option 1")
Text("Option 2")
Button("Cancel")
{ self.showSheet = false
}
}
}
}

最佳答案

从问题中不清楚在哪个环境中以及究竟发生了什么奇怪,因为经测试,提供的代码适用于 Xcode 11.2/3+ 和 iOS13.2+。

无论如何,还有另一种方法可以使用 \.presentationMode 关闭弹出窗口,如下所示

更新:好吧,我发现原来的问题可能与 macOS 有关,因为在 macOS 上提供的弹出窗口未根据描述的场景关闭。

这是 iOS/macOS 平台的用法变体(经过测试并适用于 Xcode 11.3/macOS 10.15)

struct Pop: View {
@Binding var showSheet: Bool
//@Environment(\.presentationMode) var presentationMode

var body: some View {
VStack {
Text("Option 1")
Text("Option 2")
Button("Cancel")
{
#if os(OSX)
NSApp.sendAction(#selector(NSPopover.performClose(_:)), to: nil, from: nil)
#else
//self.presentationMode.wrappedValue.dismiss() // << behaves the same as below
self.showSheet = false
#endif
}
}
}
}

关于macos - 以编程方式关闭 SwiftUI 中的弹出窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60132819/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com