我在第一个屏幕上有List
个ID和分数.
在详细信息屏幕中,我单击并调用一个回调,该回调将分数添加到List
.
当我对列表顶部的项目执行此操作时,什么都没有发生.(好)
当我对列表底部的项目执行此操作时,导航视图弹出Backback并将我放回第一页.(坏)
import SwiftUI
class IdAndScoreItem {
var id: Int
var score: Int
init(id: Int, score: Int) {
self.id = id
self.score = score
}
}
@main
struct CrazyBackStackProblemApp: App {
var body: some Scene {
WindowGroup {
NavigationView {
ListView()
}
.navigationViewStyle(.stack)
}
}
}
struct ListView: View {
@State var items = (1...50).map { IdAndScoreItem(id: $0, score: 0) }
func addScoreAndSort(item: IdAndScoreItem) {
items = items
.map {
if($0.id == item.id) { $0.score += 1 }
return $0
}
.sorted {
$0.score > $1.score
}
}
var body: some View {
List(items, id: \.id) { item in
NavigationLink {
ScoreClickerView(
onClick: { addScoreAndSort(item: item) }
)
} label: {
Text("id: \(item.id) score:\(item.score)")
}
}
}
}
struct ScoreClickerView: View {
var onClick: () -> Void
var body: some View {
Text("tap me to increase the score")
.onTapGesture {
onClick()
}
}
}
我怎样才能在细节页面上重新排序列表,这会反映在列表页面上,但导航堆栈不会弹出(当我在列表底部的列表项上执行时).我试着加了navigationStyle(.stack)
也没用.
谢谢你的帮助!