尝试创建一个包含文本字段的视图引导流,以捕获个人资料数据,并在最后一个视图中将数据存储在Firestore中。但是,需要将所有数据传递到最后一个视图,以使用这些数据注册用户。
视图0具有用户名、电子邮件和密码 视图1具有名字、姓氏和图像 视图2具有职位标题和公司名称
我能够将用户名、电子邮件和密码传递到视图1,并将名字、姓氏和图像传递到视图2。
我不能将图像传递到视图3,因为它现在被绑定并且在“预览”中要求一个参数,我无法解决。
我使用.constant("")传递字符串绑定,但我该如何传递图像?请参见下面的代码。
```
import SwiftUI
struct Step1: View {
@State var firstname = ""
@State var lastname = ""
@Binding var email: String
@Binding var password:String
@Binding var username: String
@State var image: Image?
@State var showImagePicker = false
@State private var selectedImage: UIImage?
var body: some View {
VStack{
HStack{
VStack(alignment: .leading, spacing: 4) {
Text("Create profile")
.font(.system(size: 30))
.fontWeight(.bold)
Text("Basic profile information")
.font(.system(size: 18))
}
.padding(.horizontal, 32)
.padding(.bottom, 50)
.padding(.top, 50)
Spacer()
}
VStack(spacing: 20){
HStack{
if image != nil {
image?
.resizable()
.scaledToFill()
.frame(width: 80, height: 80)
.clipShape(RoundedRectangle(cornerRadius: 10.0))
} else {
Image("upload")
.resizable()
.scaledToFill()
.frame(width: 80, height: 80)
.clipShape(RoundedRectangle(cornerRadius: 10.0))
}
Spacer()
}
.onTapGesture {
self.showImagePicker = true
}
CustomTextField(text: $firstname, placeholder: Text("First name"), ImageName: "person")
.padding()
.background(Color(#colorLiteral(red: 0.8039215803, green: 0.8039215803, blue: 0.8039215803, alpha: 0.2611568921)))
.cornerRadius(10)
CustomTextField(text: $lastname, placeholder: Text("Last name"), ImageName: "person")
.padding()
.background(Color(#colorLiteral(red: 0.8039215803, green: 0.8039215803, blue: 0.8039215803, alpha: 0.2611568921)))
.cornerRadius(10)
}
.padding(.horizontal, 32)
Spacer()
NavigationLink(
destination: Step2(firstname: $email, lastname: $password, email: $username, password: $firstname, username: $lastname, image: $image)
.navigationBarBackButtonHidden(true)
.navigationTitle("")
.navigationBarHidden(true),
label: {
Text("Sign Up")
.font(.headline)
.foregroundColor(.white)
.frame(width:360, height: 50)
.background(Color(#colorLiteral(red: 0.03573478386, green: 0.4008729458, blue: 0.7616711259, alpha: 1)))
.cornerRadius(10)
.padding()
Spacer()
})
.navigationTitle("")
.navigationBarHidden(true)
}.sheet(isPresented: $showImagePicker, onDismiss: loadImage) {
ImagePicker(image: self.$selectedImage)
}
}
func loadImage() {
guard let selectedImage = selectedImage else { return }
image = Image(uiImage: selectedImage)
}
}
struct Step1_Previews: PreviewProvider {
static var previews: some View {
Step1(email: .constant(""), password: .constant(""), username: .constant(""))
}
}
```
```
import SwiftUI
struct Step2: View {
@Binding var firstname: String
@Binding var lastname: String
@Binding var email: String
@Binding var password:String
@Binding var username: String
@Binding var image: Image?
var body: some View {
VStack{
HStack{
VStack(alignment: .leading, spacing: 4) {
Text("Create profile")
.font(.system(size: 30))
.fontWeight(.bold)
Text("Basic profile information")
.font(.system(size: 18))
}
.padding(.horizontal, 32)
.padding(.bottom, 50)
.padding(.top, 50)
Spacer()
}
VStack(spacing: 20){
CustomTextField(text: $firstname, placeholder: Text("First name"), ImageName: "person")
.padding()
.background(Color(#colorLiteral(red: 0.8039215803, green: 0.8039215803, blue: 0.8039215803, alpha: 0.2611568921)))
.cornerRadius(10)
CustomTextField(text: $lastname, placeholder: Text("Last name"), ImageName: "person")
.padding()
.background(Color(#colorLiteral(red: 0.8039215803, green: 0.8039215803, blue: 0.8039215803, alpha: 0.2611568921)))
.cornerRadius(10)
}
.padding(.horizontal, 32)
Spacer()
.navigationTitle("")
.navigationBarHidden(true)
}
}
}
struct Step2_Previews: PreviewProvider {
static var previews: some View {
Step2(firstname: .constant(""), lastname: .constant(""), email: .constant(""), password: .constant(""), username: .constant(""), image: WHAT TO PUT HERE????)
}
}
```