[英]Swift UI: relationship between the sheet and list views
我有以下示例视图来尝试在SwiftUI
sheet
的行为:
import SwiftUI
struct Word: Identifiable, Codable {
var id: String
}
struct TestView: View {
@State var isPresented = false
var items: [Word] = [Word(id: "Test1"),
Word(id: "Test2"),
Word(id: "Test3")]
var body: some View {
NavigationView {
List {
ForEach(items) { word in
Text(word.id)
}
}
.sheet(isPresented: $isPresented) {
SomeTestViewInsideTheSheet(action: {
self.isPresented = false
})
.frame(minHeight: 0, maxHeight: 400, alignment: .center)
}
.navigationBarTitle(Text("My Title"))
}
}
}
struct SomeTestViewInsideTheSheet: View {
var action: ()->()
var body: some View {
VStack {
Text("Test View")
Button("Dismiss") {
self.action()
}
}
}
}
我只是想了解: list 和 sheet 之间是什么关系? 为什么我应该使用列表末尾的.sheet
将工作表与列表联系起来? 在此示例中显示工作表的正确方法是什么。
ps 示例代码在 XCode 项目中编译良好,但在 Playground 中编译不正常。
为什么我应该使用列表末尾的
.sheet
将工作表与列表联系起来?
您没有将工作表与列表捆绑在一起。 您也没有在列表末尾添加.sheet
。 再次阅读您的代码! 您正在NavigationView
的末尾添加.sheet
。
所以是NavigationView
(“顶级”视图对象)将新的顶级视图呈现为工作表。 这实际上并不是“捆绑”任何东西。 如您所见,单击列表项不会执行任何操作。 .sheet
在这里真的只是作为一个“声明”,我将展示一张表格。
在此示例中显示工作表的正确方法是什么。
要实际呈现工作表,您需要将isPresented
设置为 true。 您可以随时将其设置为 true。 但是看到您如何拥有List
,我猜您想在选择项目时将其设置为 true 。 对于可选列表项,您可以使用Button
代替Text
:
List {
ForEach(items) { word in
Button(word.id) {
self.isPresented = true
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.