swift - 按下 SwiftUI 时更新按钮 UI
问题描述
我有一个包含按钮列表的视图,每个按钮代表一个播放器。我的目标是在按下相应按钮时将一名球员添加到球队中。
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
}
}
感谢所有帮助!
解决方案
推荐阅读
- python-3.x - etree.fromstring(response.text.encode('utf-8'), parser=etree.XMLParser(huge_tree=self.huge_tree))
- python - 如何计算给定的经度和纬度是否属于多边形区域?
- sas - SAS proc 逻辑是否执行变量选择?
- sql - 从表中检索 COUNT(*) 不一致
- riscv - 在 RISC-V 中访问硬件性能计数器
- javascript - PHP SQL 帖子部分
- node.js - mongo db atlas 中的连接是什么?
- android - (Android) 意外匹配 Pattern.compile("\\w+") 与 unicode 字母
- terraform - Terraform 如何向使用 cloudwatch 配置的 SQS 发送消息
- reactjs - React native:如何从不同的屏幕运行课程