【发布时间】:2019-11-27 22:29:48
【问题描述】:
我正在尝试设置一个可以根据点击的按钮显示多个模式的视图。
当我只添加一个sheet 时,一切正常:
.sheet(isPresented: $showingModal1) { ... }
但是当我添加另一张纸时,只有最后一张有效。
.sheet(isPresented: $showingModal1) { ... }
.sheet(isPresented: $showingModal2) { ... }
更新
我试图让它工作,但我不确定如何声明modal 的类型。我收到Protocol 'View' can only be used as a generic constraint because it has Self or associated type requirements 的错误。
struct ContentView: View {
@State var modal: View?
var body: some View {
VStack {
Button(action: {
self.modal = ModalContentView1()
}) {
Text("Show Modal 1")
}
Button(action: {
self.modal = ModalContentView2()
}) {
Text("Show Modal 2")
}
}.sheet(item: self.$modal, content: { modal in
return modal
})
}
}
struct ModalContentView1: View {
var body: some View {
Text("Modal 1")
}
}
struct ModalContentView2: View {
var body: some View {
Text("Modal 2")
}
}
【问题讨论】:
-
@Alexander,你是怎么帮忙的?对于 OP,您的方法是否有好处……您是在问 beta 4 问题吗?发生了很大变化,您的代码表明了这一点。但是 - 对我来说,真正的问题(如果我准确的话)是你有没有在 beta 3 中工作的东西>
-
@dfd 前言:我不确定代码 1) 是否设置了 2 个不同的模型回调,在不同的时间由不同的事件触发,或者 2) 设置了模式回调,以及在回调上设置另一个模态回调,这会导致第二个模态显示在第一个模态上。当我写评论时,我认为它是#2,但现在回想起来,我认为它可能是#1,但我找不到关于它的好的文档
-
@dfd 考虑到我认为 #1 正在发生,并且 #1 将是糟糕的 UX 设计,我正在推动 OP 远离该选项,这会带来额外的副作用,即回避这个整个问题。
-
我的意图是一次只显示一个模式。我在屏幕上有多个按钮,每个按钮都显示不同的模式。我在 Beta 3 中确实有这个工作,因为我可以将一个函数传递给
.presentation,它将返回适当的模态以显示,或者如果不需要显示模态,则返回 nil。我现在似乎无法在 Beta 4 中找到执行此操作的方法。