SwipeActions 按钮和 ToolBar 按钮触发的多个工作表(项目:)在 SwiftUI 中首次获取 nil 对象
Posted
技术标签:
【中文标题】SwipeActions 按钮和 ToolBar 按钮触发的多个工作表(项目:)在 SwiftUI 中首次获取 nil 对象【英文标题】:Multiple sheet(item: ) triggered by SwipeActions button and ToolBar buttons gets nil object in the first time in SwiftUI 【发布时间】:2021-12-09 22:59:56 【问题描述】:我在列表和工具栏按钮的 ForEach 循环中使用 swipeActions 在我的 SwiftUI 视图上显示不同的工作表。但是每次我向左滑动并单击编辑按钮时,该行的对象为零。如果我做同样的滑动并再次单击,一切顺利。其他人以前有过这种错误吗?谢谢。
下面是相关代码:
struct LanguagesView: 查看
@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)
)
如果我只想到由 swipeActions Edit 按钮触发的工作表,那么下面的代码可以完美运行。但我仍然需要由 ToolBar 按钮触发的其他工作表。
.sheet(item: self.$toBeEdit, content: toBeEdit in
EditLanguageView( meLanguage: toBeEdit)
)
【问题讨论】:
【参考方案1】:经过更多搜索后,我意识到这与 SwipeActions 无关。这实际上类似于这个问题:
SwiftUI presenting sheet with Binding variable doesn't work when first presented
所以我在 ForEach 循环之后添加了一个隐藏的文本,问题就解决了。
ForEach(self.meLanguages, id: \.id) ...
if self.toBeEdit != nil
Text("\(self.toBeEdit!.wrappedName)").hidden()
【讨论】:
以上是关于SwipeActions 按钮和 ToolBar 按钮触发的多个工作表(项目:)在 SwiftUI 中首次获取 nil 对象的主要内容,如果未能解决你的问题,请参考以下文章
为啥 swipeActions 修饰符不能直接与 List 容器一起使用? #SwiftUI