【发布时间】:2021-04-02 23:47:47
【问题描述】:
我想使用 swiftUI 编写我的第一个 iOS 应用程序。我有很多编程经验,但都是很久以前的事了。我以为我可以快速学习 swift,但我错了。世界变了……
我有一个包含参与者列表的主视图(一个名为“activePersons”的数组),每个参与者都有一个详细视图(“EditPerson”),应该允许从列表中修改或删除参与者。为了添加新人,列表中的最后一项不是人,而是指向允许选择新人的详细视图(“NewPerson”)的符号。
目前,我已将人员列表定义为全局变量。当然,这不会导致主视图更新。
我已经尝试过使用@State 包装器,但我的所有尝试都失败了。当然,我可以在 ContentView 中将 activePersons 定义为状态变量,但是我无法从详细视图中对其进行修改。
非常感谢任何帮助!
这是我的代码(摘录):
import SwiftUI
struct Person: Identifiable {
let id: Int
let name: String
}
var activePersons: [Person] = [ Person(id: 1, name: "Dummy1")]
var otherPersons: [Person] = [ Person(id: 1, name: "Dummy2"),
Person(id: 2, name: "Dummy3"),
Person(id: 3, name: "Dummy4")]
...
ContentView.swift 内容如下:
import SwiftUI
struct ContentView: View {
var body: some View {
TabView {
NavigationView {
List {
ForEach(0..<activePersons.count, id: \.self) { value in
NavigationLink(
destination: EditPerson(),
label: {
VStack (alignment: .leading) {
Text(activePersons[value].name)
.font(.system(size: 26, weight: .regular))
}.padding(15)
})
}
NavigationLink(
destination: NewPerson(),
label: {
Image(systemName: "person.crop.circle.badge.plus")
.font(.system(size: 26, weight: .light))
.foregroundColor(Color(red: 0.7, green: 0.7, blue: 0.7))
.padding(15)
})
}.environment(\.defaultMinListRowHeight, 30)
.navigationTitle("Participants")
}
.tabItem{
Image(systemName: "square.and.pencil")
Text("Planning")
}
...
NewPerson.swift(修改参与者列表的详细视图之一):
import SwiftUI
struct NewPerson: View {
@State var name: String = ""
var body: some View {
List {
ForEach(0..<otherPersons.count) { value in
Button(action: {
activePersons.append(otherPersons[value])
}) {
Text(otherPersons[value].name)
}
}
}.environment(\.defaultMinListRowHeight, 30)
}
}
【问题讨论】:
标签: swiftui