SwipeActions按钮和ToolBar按钮触发的多个工作表(项:)在SwiftUI中首次获得nil对象



我在列表的ForEach循环中使用swiveActions和工具栏按钮在SwiftUI视图中显示不同的工作表。但每次我向左滑动并单击"编辑"按钮时,该行的对象都为零。如果我再次做同样的滑动和点击操作,一切都会很顺利。其他人以前也有这种毛病吗?非常感谢。

这是相关代码:

structLanguagesView:View{

@State var activeSheet: ActiveSheet?
@State var toBeEdit: MeLanguage?

var body: some View {
NavigationView {
List {
ForEach(self.meLanguages, id: .id) { lan in                   
HStack {
Text("(lan.wrappedName)")
.font(.headline)
}.swipeActions(allowsFullSwipe: false) {
Button(
action: {
self.activeSheet = .editLanguage
self.toBeEdit = lan
},
label: { Label("Edit", systemImage: "pencil") }
) .tint(.indigo)
}
}
}
.sheet(item: $activeSheet,
onDismiss: {
self.toBeEdit = nil
}
){
item in
switch item {
case .addLanguage:
AddLanguage()
case .sortLanguages:
SortLanguagesView()
case .editLanguage:
if self.toBeEdit != nil {
EditLanguageView( meLanguage: self.toBeEdit! )
}
else {
Text("self.toBeEdit is nil")
}
default:
Text("No such button on ContentView.")
}
}

.toolbar {
ToolbarItemGroup {
HStack {
Text("(self.meLanguages.count) Languages on Card").font(.headline)
self.barButtons
}
}
}
}
}
var barButtons: some View {
HStack {

Button(
action: {
self.activeSheet = .sortLanguages
},
label: { Label("Sort Languages", systemImage: "arrow.up.arrow.down.circle")
}
).id("sortLanguages")

Button(
action: {
self.activeSheet = .addLanguage
},
label: { Label("Add Language",
systemImage: "plus")
.imageScale(.large)
}
)
}
}

}

如果我只想到由滑动Actions Edit按钮触发的表单,下面的代码可以完美地工作。但我仍然需要其他由工具栏按钮触发的工作表。

.sheet(item: self.$toBeEdit, content: { toBeEdit in
EditLanguageView( meLanguage: toBeEdit)                        
})

经过更多的搜索,我意识到这与SwipeActions无关。这实际上类似于这个问题:

SwiftUI显示具有Binding变量的工作表;首次提交时不起作用

所以我在ForEach循环之后添加了一个隐藏的Text,问题就解决了。

ForEach(self.meLanguages, id: .id) { ... }
if self.toBeEdit != nil {
Text("(self.toBeEdit!.wrappedName)").hidden()
}

最新更新