16

默认情况下,Mac Catalyst 会创建一个标题为“帮助”的菜单,该菜单应该包含应用程序的帮助。但是,我没有找到有关如何实施帮助的文档。对于标准 Mac 应用程序,您可以使用帮助手册。但是,没有提及如何在 Mac Catalyst 中使用帮助手册。我试图将 HelpBookDirectoryName 添加到 info.plist 但这不起作用。有没有一种方法可以让帮助书与 Mac Catalyst 一起使用?

4

4 回答 4

13

我们为我们的 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)
    }
}
于 2019-10-07T21:27:23.747 回答
7

好的...我设法通过使用第三方应用程序(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
于 2019-11-16T04:41:43.433 回答
2

经过一番测试。我发现以下方法最适合我。对于 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)

这是最终结果: 在此处输入图像描述

于 2020-06-04T07:40:35.687 回答
0

最简单的方法就是重写该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!")
}
于 2021-10-04T08:46:46.180 回答