[英]SwiftUI ForEach.onDelete doesn't work correctly in TabView
我試圖用 ForEach 循環實現一個基本列表。 我已經嘗試過使用ForEach(..., id: \.self)
的可散列結構和基本數組,如下所示。 每當它在選項卡視圖中並更改為EditMode.active
時,您必須按-
大約一秒鍾,就好像它是LongPressGesture()
一樣,直到它顯示要刪除的滑動。
問題示例
struct HashArray: Hashable {
let id = UUID()
init(number: Int) {
self.number = number
}
let number: Int
}
struct TabStuff: View {
@State var markers: [Int] = [1, 2, 3, 4, 5]
@State var testArray: [HashArray] = [HashArray(number: 0), HashArray(number: 1), HashArray(number: 2), HashArray(number: 3)]
var body: some View {
VStack {
EditButton()
List {
ForEach(testArray, id: \.id) { marker in
Text("Number: \(marker.number)")
}.onDelete(perform: { indexSet in
markers.remove(atOffsets: indexSet)
})
}
}
}
}
struct OtherView: View {
@State var markers: [Int] = [1, 2, 3, 4, 5]
var body: some View {
VStack {
EditButton()
List {
ForEach(markers, id: \.self) { marker in
Text("\(marker)")
}.onDelete(perform: { indexSet in
markers.remove(atOffsets: indexSet)
})
}
}
}
}
像這樣放在選項卡視圖中時,兩者都不起作用
struct ContentView: View {
@State var selectedTab: NavigationTab = .list
var body: some View {
TabView(selection: $selectedTab) {
TabStuff()
.onTapGesture {
selectedTab = .list
}
.tabItem {
Text("List Test")
}
OtherView()
.onTapGesture {
selectedTab = .secondView
}.tabItem {
Text("Second View")
}
}
}
}
關於如何讓它做出適當反應的任何想法?
這是因為您在整個視圖上有一個.onTapGesture()
,當用戶點擊視圖中的任何位置時,該視圖具有優先權。
標簽項將自動讓您在標簽之間切換而無需更新選擇,因此您可以完全刪除點擊手勢。 但是,如果您需要在切換時更新selectedTab
,您可以在.tabItem
上使用.tag()
修飾符。
TabStuff()
// REMOVE THIS
//.onTapGesture {
// selectedTab = .list
//}
.tabItem {
Text("List Test")
.tag(NavigationTab.list) // ADD THIS
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.