【发布时间】:2020-11-20 08:58:52
【问题描述】:
我的程序有两个主要类,Team 和 Player。 Team 有一个内置数组,其中包含 Player 类的 23 个实例,所有实例都有自己的属性和方法。在我的应用程序的主要内容视图中,我显示了这些 homeTeam.players 的列表,并且每一行都有一个 .contextMenu 可以选择调用 editName() 来自单个玩家。
当 editName() 被调用时,它将打开一个警报并允许用户在 textField 中输入一个新名称,然后保存它并更改 Player 的 name 属性。
我的问题是列表不会在主视图上更新并且玩家名称保持不变,但是当您再次更改它时,名称就在 textField 中,所以它已经改变了,只是'没有被显示。
玩家等级:
class Player{
var playerName: String = ""
var id = UUID()
init(playerName: String){
self.playerName = playerName
}
func editName{
//Displays alert with text field
self.playerName = newName
}
}
团队班:
class Team{
var teamName: String = ""
var players: [Player] = [Player("Player 1"),
Player("Player 2"),
Player("Player 3"),
Player("Player 4")] //Continues for 23 Players
init(teamName: String){
self.teamName = teamName
}
}
快速视图:
List(homeTeam.players) {player in
HStack{
Text("\(player.shirtNumber) - \(player.playerName)")
Spacer()
Text("\(player.timerText)")
}
.contextMenu{
Button(action: {player.editName()}) {
Text("Edit Name")
Image(systemName: "square.and.pencil")
}
}
}
我对 SwiftUI 还是比较陌生,但对 UIKit 和故事板有一定的经验,因此我们将不胜感激。
【问题讨论】:
-
使您的模型结构并添加视图模型作为 ObservableObject 持有您的模型作为发布的属性。
-
将播放器类更改为结构?团队也是?然后我将什么更改为 ObservableObject?抱歉,这方面经验不是很丰富