swift - 表单中的 SwiftUI 子视图
问题描述
我想了解是否有可能在 SwiftUI 中的表单中本质上拥有一个表单来帮助进行代码抽象。我将在下面举一个简单的例子,所以说我们有最简单的形式
设置
struct TestForm: View {
@State var title: String = ""
@State var description: String = ""
var body: some View {
Form {
Section {
TextField("Name", text: $title)
TextField("Description", text: $description)
}
}
}
}
添加新表单
现在我想添加一个新的子表单,但我不希望它的逻辑使主表单视图复杂化。在这里您可以看到我已添加SubForm
为新视图及其所有依赖项(忽略状态变量,它们只是为了确保 swift 不会抱怨。实际上,子表单可以链接到它想要的任何状态)
struct TestForm: View {
@State var title: String = ""
@State var description: String = ""
@State var option: Int = 0
func SubForm() -> some View {
VStack {
TextField("SubForm Name", text: $title)
Picker(selection: $option, label: Text("Question Type")) {
ForEach(Question.PayloadType.allCases, id: \.self) {
Text($0.rawValue)
}
}
}
}
var body: some View {
Form {
Section {
TextField("Name", text: $title)
TextField("Description", text: $description)
}
SubForm()
}
}
enum FormPicker: String, Codable, CaseIterable {
case firstOption = "First Option"
case secondOption = "Second Option"
}
}
但现在表格看起来像这样:
如您所见,子表单本质上位于一个列表项中。这实际上会导致导航链接的可用性问题。
一个明显的问题是 Form 本质上是一个 List,而 List 不会展平VStacks
甚至是其他Form
s(想象一下子视图被包裹在 aForm
而不是VStack
it 中)。
但是,我真的很想保留 Form 提供的样式,但也想做这种逻辑分组。黄金标准如下所示:
你能推荐任何其他方式来实现这种抽象,同时保持一个可用的表单吗?
提前喝彩
解决方案
您可以将第二个表单添加为新部分吗?这是你要找的吗?
var body: some View {
Form {
Section {
TextField("Name", text: $title)
TextField("Description", text: $description)
}
Section {
TextField("SubForm Name", text: $title)
TextField("QuestionType", text: $description)
}
}
}
推荐阅读
- php - 我需要帮助 确定我是否在 html 或 php 代码片段中犯了错误
- mysql - 如何从文本文件中读取数据并将其放入c中的mysql数据库中
- css - svg 旋转 90 度但消失
- java - 在使用 Java 的 Selenium 中,是否可以在 testNG 中只编写一种测试方法并从中形成多个测试?
- c++ - 产量超出预期
- django - 收到 Stripe Checkout Session 付款后,如何在 Django 中更改我的“订单”?
- javascript - JavaScript - 使用 Array.prototype.splice 从数组中删除元素时出现意外结果
- php - 使用 PHP 从 Facebook 个人资料 ID 获取 Facebook 个人资料 URL
- php - PHP 警告:mysqli_stmt_bind_param() 期望参数 1 为 mysqli_stmt,bool 在
- heroku - Heroku - 部署前转移域名