我正在完成一个需要用户数据输入字段的应用程序。我用少量数据元素对其进行建模以简化开发。今天我尝试添加其他元素,但惊讶地发现我只能向一个视图添加 10 个视图。所以我尝试了最简单的设计(如下)。如果我在视图中添加了 11 个“事物”,它会立即在顶部项目上显示错误,无论它是什么:
“传递给不带参数的调用的参数”
我是否将外部容器称为 ScrollView、VStack、List 或 Form 都没有关系。同样的行为。Text/TextField 子单元是否在 VStack 中无关紧要。
所以我回到了基础 - 刚刚添加了十个文本视图。没问题。添加第十一个,它会爆炸。这是其中一种变体 - 但我需要做的就是添加 10 个简单的 Text 视图以使其中断。
我一定在这里遗漏了一些非常基本的东西。我检查了较新版本的 Xcode,但我有最新版本 11.2 beta 2 (11B44)。
@State private var textField1: String = "Pass to the ListCell"
@State private var textField2: String = "2"
//more of these
var body: some View {
NavigationView {
VStack {
//extract the VStack and create a separate struct
ListCell(tfString: textField1)
VStack {
Text("Text Field")
TextField("Placeholder", text: $textField2)
.textFieldStyle(RoundedBorderTextFieldStyle())
.padding()
}
VStack {
Text("Text Field")
TextField("Placeholder", text: $textField3)
.textFieldStyle(RoundedBorderTextFieldStyle())
.padding()
}
//more of the above VStacks
Text("6")
Text("7")
Text("8")
Text("9")
Text("10")
//Spacer()
//Text("11")
}
}
}
Run Code Online (Sandbox Code Playgroud)
任何指导将不胜感激。
Sor*_*ica 15
使用Group {...} https://developer.apple.com/documentation/swiftui/group
var body: some View {
NavigationView {
VStack {
//extract the VStack and create a separate struct
ListCell(tfString: textField1)
Group {
VStack {
Text("Text Field")
TextField("Placeholder", text: $textField2)
.textFieldStyle(RoundedBorderTextFieldStyle())
.padding()
}
VStack {
Text("Text Field")
TextField("Placeholder", text: $textField3)
.textFieldStyle(RoundedBorderTextFieldStyle())
.padding()
}
}
//more of the above VStacks
Group {
Text("6")
Text("7")
Text("8")
Text("9")
Text("10")
}
//Spacer()
//Text("11")
}
}
}
Run Code Online (Sandbox Code Playgroud)
ViewBuilderSwiftUI 中的 s 将 0 到 10 个元素放入其初始值设定项中,除此之外,您还必须开始使用Group、VStack、HStack、List等对它们进行分组ForEach。
最好的方法是开始提取一些属于单独视图的元素,例如:
struct FormCell: View {
@Binding var inputString: String
var body: some View {
VStack {
Text("Text Field")
TextField("Placeholder", text: $inputString)
.textFieldStyle(RoundedBorderTextFieldStyle())
.padding()
}
}
}
Run Code Online (Sandbox Code Playgroud)
接下来,如果您有几个,您可以使用ForEach和List或将它们分组VStack。
| 归档时间: |
|
| 查看次数: |
3727 次 |
| 最近记录: |