list - 如何在不同的视图中使用 SwiftUI 中的结构内部的结构?
问题描述
我有一个简单的项目,在结构内部有一个结构,并且想首先添加单个用户的姓名和爱好,而不是想将此用户添加到整个用户池中。代码如下:
import SwiftUI
struct User: Identifiable, Hashable {
var id = UUID()
var firstName = ""
var lastName = ""
var hobbiesOfUser = [Hobbies]()
}
struct Hobbies: Identifiable, Hashable {
var id = UUID()
var nameOfHobby = ""
var nameClub = ""
}
class UsersStorage: ObservableObject {
@Published var users = [User]()
}
struct ContentView: View {
@EnvironmentObject var userStorage: UsersStorage
@State private var isPresented = false
var body: some View {
NavigationView {
List(userStorage.users) { singleUser in
VStack {
HStack {
Text(singleUser.firstName)
Text(singleUser.lastName)
}
}
}
.navigationBarItems(trailing:
Button(action: {
self.isPresented = true
}) {
Text("New User")
}.sheet(isPresented: $isPresented, onDismiss: {
self.isPresented = false
}) {
AddUserView(isPresented: self.$isPresented, user: User()).environmentObject(self.userStorage)
}
)
}
}
}
struct AddUserView: View {
@EnvironmentObject var userStorage: UsersStorage
@Binding var isPresented: Bool
@State var user: User
@State var hobbiesOfUser = [Hobbies]()
var body: some View {
NavigationView {
VStack {
Text("First Name")
TextField("First Name", text: $user.firstName)
Text("Last Name")
TextField("Last Name", text: $user.lastName)
NavigationLink(destination: AddHobbieView(hobbie: Hobbies())) {
Text("Add New Hobbie")
}
List(user.hobbiesOfUser) { singleHobbie in
VStack {
HStack {
Text(singleHobbie.nameOfHobby)
Text(singleHobbie.nameClub)
}
}
}
HStack {
Button(action: {
self.isPresented = false
}){
Text("Cancel")
}
Button(action: {
self.userStorage.users.append(self.user)
self.isPresented = false
}){
Text("Save")
}
}
}
}
}
}
struct AddHobbieView: View {
@EnvironmentObject var userStorage: UsersStorage
@State var hobbie: Hobbies
var body: some View {
VStack {
Text("Hobby")
TextField("First Name", text: $hobbie.nameOfHobby)
Text("Club")
TextField("Last Name", text: $hobbie.nameClub)
HStack {
Button(action: {
// self.userStorage.users.append(self.hobbie)
}){
Text("Cancel")
}
Button(action: {
}){
Text("Save")
}
}
}
}
}
我的问题是:如何将爱好添加到 AddUserView 中的列表并获取 AddHobbieView 中的按钮让我回到 AddUserView。
解决方案
当您想关闭时添加@Environment(\.presentationMode) var presentationMode
并AddHobbieView
调用self.presentationMode.wrappedValue.dismiss()
view
我希望这有帮助!
推荐阅读
- google-chrome-extension - 将 google 优化与 chrome 扩展集成时遇到不同的错误
- laravel-8 - 如何用 min 获取行数据
- reactjs - 如何在 React 中添加到父事件处理程序
- python - 挣扎于 While 循环
- java - 什么
应该为这些方法添加标签吗? - javascript - 如何使用javascript中的过滤器根据性别过滤掉对象数组?
- unity3d - 哪个是在 Unity2D 中创建像素艺术的最佳应用程序?
- java - 修复:线程“main”中的异常 java.lang.NumberFormatException:对于输入字符串:“”
- javascript - 单击按钮时如何淡入div?
- python - Pyarrow:如何在 structType 中转换数据类型?