【发布时间】:2021-12-20 09:50:34
【问题描述】:
我编写了一个 SwiftUI 应用程序并将其发布在 Mac App Store 上。我还编写了详细的用户指南和各种技术指南,以帮助用户了解如何使用该应用程序并解释其显示。所有这些 .md 文件都包含在我的应用程序中。如何允许帮助菜单打开和显示这些文件?
【问题讨论】:
我编写了一个 SwiftUI 应用程序并将其发布在 Mac App Store 上。我还编写了详细的用户指南和各种技术指南,以帮助用户了解如何使用该应用程序并解释其显示。所有这些 .md 文件都包含在我的应用程序中。如何允许帮助菜单打开和显示这些文件?
【问题讨论】:
我不知道其他人是怎么做到的,但这是我会使用的方法:
import SwiftUI
@main
struct MacApp: App {
@State var showHelp = false
var body: some Scene {
WindowGroup {
ContentView()
.sheet(isPresented: self.$showHelp) { HelpView() }
}.commands {
CommandGroup(replacing: .help) {
Button(action: {showHelp = true}) {
Text("App Help")
}
}
}
}
}
对于 iOS:
@main
struct IOSApp: App {
@State var showHelp = false
var body: some Scene {
WindowGroup {
ContentView(showHelp: $showHelp)
.sheet(isPresented: self.$showHelp) { HelpView() }
}
}
}
传递showHelp(或作为ObservableObject/EnvironmentObject),
然后设置showHelp=true,当单击带有Image(systemName: "info.circle") 的按钮时
例如。
struct HelpView: View {
@Environment(\.dismiss) var dismiss
@State var mdText = AttributedString()
var body: some View {
VStack (alignment: .leading, spacing: 20) {
Button(action: {dismiss()}) {
Text("Done").foregroundColor(.blue)
}.padding(10)
ScrollView {
Text("Welcome to my app help")
Text(mdText)
}.frame(width: 333, height: 333)
}
.onAppear {
// get your .md files contents
do {
mdText = try AttributedString(markdown: "***help file contents***")
} catch {
// error
}
}
}
}
EDIT1:读取您的应用程序中包含的md 文件。
.onAppear {
var str: String = ""
if let mdFile = Bundle.main.path(forResource: "README", ofType: "md") {
do {
str = try String(contentsOfFile: mdFile)
mdText = try AttributedString(markdown: str)
} catch {
// deal with error
}
}
}
EDIT2:iOS 应用的 ContentView:
struct ContentView: View {
@Binding var showHelp: Bool // <--- here
var body: some View {
Button(action: {showHelp = true}) {
VStack {
Image(systemName: "info.circle").resizable().frame(width: 60, height: 60)
Text("Info").font(.caption)
}.foregroundColor(Color.blue)
}
}
}
【讨论】:
try AttributedString(markdown: "***help file contents***") 行中,如何将文件路径插入到我的文档中 - 例如filepath = Bundle.main.url(forResource: "README", withExtension: "md")?
README.md 文件更新了我的答案。