ios - 视图未使用 SwiftUI 呈现
问题描述
我有列表,单击工作表中的任何单元格时,它都会显示新视图,并且它最初正在工作。
我在每个单元格中都有删除选项,它将从列表中删除特定单元格,当我删除任何单元格并单击列表中的其他单元格时,它不会显示视图。
任何人都知道可能是什么问题?
这是展示工作表的代码:
struct StoriesView: View {
enum StoriesSheet: Identifiable {
var id: Int {
switch self {
case .showStory:
return 0
case .addStory:
return 1
case .capturePicture:
return 2
case .editStory:
return 3
case .report:
return 4
}
}
case addStory(data: Data)
case capturePicture(_ type: CaptureImageType)
case showStory(_ story: Story)
case editStory(_ story: Story)
case report(_ story: Story)
}
@StateObject var viewModel = StoriesViewModel()
@State var showRefreshView: Bool = false
@State var showRefreshOnBottom: Bool = false
@State var pullStatus: CGFloat = 0
// Camera
@State var showGetPictureActionSheet = false
@State var currentSheet: StoriesSheet?
var body: some View {
RefreshableList(showRefreshView: $showRefreshView, pullStatus: $pullStatus, action: {
viewModel.apply(.onRefresh)
}, showRefreshOnBottom: $showRefreshOnBottom) {
Group {
if viewModel.shouldShowStories {
storiesList() .padding(.bottom, 80)
.listRowInsets(EdgeInsets())
} else {
EmptyFeedView(imageName: "camera", description: "new_story_description", buttonText: "new_story") {
showGetPictureActionSheet = true
}.frame(minWidth: 0, maxWidth: .infinity, minHeight: 500, maxHeight: .infinity, alignment: .center)
.padding()
}
}.sheet(item: $currentSheet, content: { sheet in
getContent(for: sheet)
})
}
.onAppear {
viewModel.apply(.onRefresh)
}.actionSheet(isPresented: $showGetPictureActionSheet, content: {
getPictureActionSheet()
}).navigationBarItems(leading: EmptyView(), trailing: CameraButton(didSelectType: { (type) in
currentSheet = .capturePicture(type)
}))
}
private func storiesList() -> StoriesListView {
StoriesListView(storiesList: viewModel.storiesList) { story in
self.viewModel.selectedStory = story
currentSheet = .showStory(story)
} didInteractWithStory: { (story, interaction) in
interact(interaction, with: story)
}
}
private func interact(_ interaction: StoryInteraction, with story: Story) {
switch interaction {
case .edit:
currentSheet = .editStory(story)
case .report:
currentSheet = .report(story)
}
}
private func getContent(for sheet: StoriesSheet) -> some View {
switch sheet {
case .showStory(let story):
guard let selectedStory = viewModel.selectedStory else {
return AnyView(StoryDetailView(story: story))
}
return AnyView(StoryDetailView(story: selectedStory))
case .capturePicture(let type):
return AnyView(ImagePicker(type: type) { (data) in
if let data = data {
currentSheet = .addStory(data: data)
} else {
currentSheet = nil
}
})
case .addStory(let data):
return AnyView(AddEditStoryView(viewModel: AddStoryViewModel(imageData: data)))
case .editStory(let story):
return AnyView(AddEditStoryView(viewModel: EditStoryViewModel(story)))
case .report(let story):
return AnyView(ReportReasonSelectionView(story))
}
}
private func getPictureActionSheet() -> ActionSheet {
return ActionSheet(
title: Text("sheet_image_title").font(.system(.headline)),
buttons: [cameraActionSheetButton(),
libraryActionSheetButton(),
.cancel()])
}
private func cameraActionSheetButton() -> Alert.Button {
.default(Text("sheet_image_take_photo"), action: {
currentSheet = .capturePicture(.camera)
})
}
private func libraryActionSheetButton() -> Alert.Button {
.default(Text("sheet_image_pick"), action: {
currentSheet = .capturePicture(.photoLibrary)
})
}
}
请查看附加的完整代码以显示故事。
任何帮助将不胜感激。提前致谢。
解决方案
推荐阅读
- javascript - 在设备上运行应用程序时未触发 Google Sheets API
- android - 使用 Google 开发人员密钥签署 APK 后,支持 MirrorLink 的应用验证器失败
- android - Room SQLite 查询不返回任何结果,即使数据库中有匹配的行
- javascript - 如何根据对象的属性加载动态组件?
- android - 颤动更改所选选项卡的背景
- arrays - 具有三个维度的 Sub2ind - 访问所有维度
- powershell - 用于在 Citrix VDI 上模拟键盘按下的 SendKey 替代方案
- sql-server - 如何在 SSAS 或 Power BI 中创建从表格模型的元数据中提取信息的 DAX 度量?
- r - Y~0|X1+X2... 语法是什么意思
- php - 您可以手动将列添加到 laravel postgre 数据库吗