Swift 按快捷键时更新按钮用户界面
我有一个包含按钮列表的视图,每个按钮代表一个播放器。我的目标是在按下各自的按钮时为球队添加一名球员Swift 按快捷键时更新按钮用户界面,swift,xcode,swiftui,Swift,Xcode,Swiftui,我有一个包含按钮列表的视图,每个按钮代表一个播放器。我的目标是在按下各自的按钮时为球队添加一名球员 struct AddPlayers: View { var team: Team var playerData = getPlayers() var body: some View { List(playerData) { player in Button(action: { addPlayerToT
struct AddPlayers: View {
var team: Team
var playerData = getPlayers()
var body: some View {
List(playerData) { player in
Button(action: {
addPlayerToTeam(teamID: team.id, playerID: player.id)
// update the PlayerRow to show player was added to team
}) {
PlayerRow(player: player, team: self.team)
}
}
.navigationBarTitle(Text("Players"))
}
}
struct PlayerRow: View {
var player: Player
var team: Team
var body: some View {
let view = HStack {
Text(verbatim: player.FirstName)
Text(verbatim: player.LastName)
Spacer()
// displays true if player is on the team
if playerInTeam(team: team, player: player) {
Text("True")
}
}
return view
}
}
当按下按钮时,我可以将玩家添加到团队中,但我还不知道如何更新UI。目前,如果我关闭应用程序并重新打开它以强制重新加载UI,则在正确的播放器上显示“True”
我试图使playerData
成为@State
变量,并在每次按下按钮时更新playerData
。这会导致行PlayerRow(player:player,team:self.team)
运行,但是从未输入PlayerRow
的主体,因此UI不会更新
struct AddPlayers: View {
var team: Team
@State var playerData = getPlayers()
var body: some View {
List(playerData) { player in
Button(action: {
addPlayerToTeam(teamID: team.id, playerID: player.id)
// attempt to force reload the List
playerData = getPlayers()
}) {
// called due to playerData = getPlayers()
PlayerRow(player: player, team: self.team)
}
}
.navigationBarTitle(Text("Players"))
}
}
struct PlayerRow: View {
// this sections is run due to playerData = getPlayers()
var player: Player
var team: Team
var body: some View {
// code does not enter here
let view = HStack {
Text(verbatim: player.FirstName)
Text(verbatim: player.LastName)
Spacer()
// displays true if player is on the team
if playerInTeam(team: team, player: player) {
Text("True")
}
}
return view
}
}
感谢您的帮助 我还面临着一个类似的问题,即在swift UI中更新按钮按下时的按钮图像。您找到问题的解决方案了吗?我还面临着一个类似的问题,即在swift UI中更新按钮按下时的按钮图像。你找到问题的答案了吗?