繁体   English   中英

Swift UI:工作表和列表视图之间的关系

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM