默认情况下,Mac Catalyst 会创建一个标题为“帮助”的菜单,该菜单应该包含应用程序的帮助。但是,我没有找到有关如何实施帮助的文档。对于标准 Mac 应用程序,您可以使用帮助手册。但是,没有提及如何在 Mac Catalyst 中使用帮助手册。我试图将 HelpBookDirectoryName 添加到 info.plist 但这不起作用。有没有一种方法可以让帮助书与 Mac Catalyst 一起使用?
4 回答
我们为我们的 iOS 应用程序使用基于 Web 的帮助系统,并将其添加到适当的 UIViewControllers 似乎可以连接我们 Catalyst 版本的帮助菜单命令:
// Show some help.
@IBAction func showHelp(_ sender: Any) {
UIApplication.shared.open(URL(string: "http://www.ourapp.com/faq")!)
}
// Return whether action can be performed.
override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
if action == #selector(self.showHelp(_:)) {
return true
} else {
return super.canPerformAction(action, withSender: sender)
}
}
好的...我设法通过使用第三方应用程序(Help Crafter)来创建MyAppName.help
文件/文件夹,但您可以手动完成。
创建MyAppName.help
文件后,您需要将其复制到项目中的Resources文件夹。我首先将文件复制到 Finder 中的 Resources 文件夹,然后将该文件拖到 Xcode 中的 Resources 文件夹中。
最重要的一步:将其拖入项目时选择“创建文件夹引用”。
我之前选择了“创建组”,但它从来没有奏效。
这个链接也有一些有用的信息,特别是如果您要手动创建 MyAppName.help 文件
http://swiftrien.blogspot.com/2015/06/adding-apple-help-to-os-x-application.html
简而言之,文件/文件夹中将.plist
包含一个文件MyAppName.help
,但您还需要在项目.plist
文件中添加两个键:
Help Book directory name
-> 你的.help
文件名(从技术上讲,它是一个带有.help
扩展名的目录)Help Book identifier
-> 对我来说是,maccatalyst.com.nitramluap.MyAppName.help
但它必须与MyAppName.help
.plist
键下的标识符相同Bundle Identifier
经过一番测试。我发现以下方法最适合我。对于 MacCatalyst 应用程序。
脚步:
将以下代码添加到 AppDelegate。因此删除默认帮助。
override func buildMenu(with builder: UIMenuBuilder) {
super.buildMenu(with: builder)
builder.remove(menu: .help)
}
将以下选择器添加到 AppDelegate。这将提供指向您的帮助网站的链接。
@IBAction func openHelp() {
UIApplication.shared.open(URL(string: "https://www.legolas.me/blankbook-english")!)
}
最后,将以下代码添加到 buildMenu 函数中。在 builder.remove 之后。
let helpCommand = UIKeyCommand(input: "W", modifierFlags: [.command], action: #selector(openHelp))
helpCommand.title = "Blankbook's Guide"
let helpMenu = UIMenu(title: "Blankbook's Guide", image: nil, identifier: UIMenu.Identifier("guide"), options: .displayInline, children: [helpCommand])
builder.insertChild(helpMenu, atStartOfMenu: .application)
最简单的方法就是重写该buildMenu(with:)
函数。我在我的 App Delegate 中使用它:
override func buildMenu(with builder: UIMenuBuilder) {
if let helpMenu = builder.menu(for: .help) {
let helpKeyCommand = UIKeyCommand(input: "?", modifierFlags: [.command], action: #selector(helpAction))
helpKeyCommand.title = NSLocalizedString("YOUR_APP_NAME Help", comment: "")
let newHelpMenu = helpMenu.replacingChildren([helpKeyCommand])
builder.replace(menu: .help, with: newHelpMenu)
}
super.buildMenu(with: builder)
}
@objc private func helpAction() {
// Perform your action here
print("help!")
}