【发布时间】:2021-07-26 13:56:53
【问题描述】:
我正在尝试呈现一系列视图,每个视图都从用户那里收集一些信息。当用户输入所有必要的数据时,他们可以移动到下一个视图。到目前为止,我已经获得了这个(简化的)代码,但我无法显示子视图本身(参见 MasterView VStack{} 中的第一行)。
import SwiftUI
protocol DataEntry {
var entryComplete : Bool { get }
}
struct FirstSubView : View, DataEntry {
@State var entryComplete: Bool = false
var body: some View {
VStack{
Text("Gender")
Button("Male") {
entryComplete = true
}
Button("Female") {
entryComplete = true
}
}
}
}
struct SecondSubView : View, DataEntry {
var entryComplete: Bool {
return self.name != ""
}
@State private var name : String = ""
var body: some View {
Text("Age")
TextField("Your name", text: $name)
}
}
struct MasterView: View {
@State private var currentViewIndex = 0
let subview : [DataEntry] = [FirstSubView(), SecondSubView()]
var body: some View {
VStack{
//subview[currentViewIndex]
Text("Subview placeholder")
Spacer()
HStack {
Button("Prev"){
if currentViewIndex > 0 {
currentViewIndex -= 1
}
}.disabled(currentViewIndex == 0)
Spacer()
Button("Next"){
if (currentViewIndex < subview.count-1){
currentViewIndex += 1
}
}.disabled(!subview[currentViewIndex].entryComplete)
}
}
}
}
出于样式原因,我不想使用 NavigationView。你能指出我如何解决这个问题的正确方向吗?也许是不同的方法?
【问题讨论】:
标签: view swiftui swift-protocols