如何在打开在线网页的 NSAlert 中放置一个问号按钮?

How to place a question mark button in a NSAlert that opens an online web page?

编辑:我的问题不是很清楚,现在我编辑了它以明确我需要打开在线网页而不是帮助手册。

我想在指向带有帮助资源的在线网页的 macOS 项目的 NSAlert 中包含一个问号按钮。

我看到here有两种可能:

var showsHelp: Bool Specifies whether the alert has a help button.

var helpAnchor: String? The alert’s HTML help anchor.

但我不知道如何实现它。

我使用这个代码:

@IBAction func buttonPressed(_ sender: Any) {
    let myAlert: NSAlert = NSAlert()

    myAlert.messageText = "Message"
    myAlert.informativeText = "Informative text."

    myAlert.showsSuppressionButton = true

    myAlert.addButton(withTitle: "Later")
    myAlert.addButton(withTitle: "Now")
    myAlert.addButton(withTitle: "OK")

    let choice = myAlert.runModal()

    switch choice {
    case NSAlertFirstButtonReturn:
        print ("OK")
    case NSAlertSecondButtonReturn:
        print ("Now")
    case NSAlertThirdButtonReturn:
        print ("Later")
    default: break

    }
    if myAlert.suppressionButton!.state == 1 {
        print ("Checked")
    } else {
        print ("Not checked")
    }

}

使用 helpAnchor 属性 设置帮助锚点,可以重定向到文档或网站中的某个部分。

var helpAnchor The alert’s HTML help anchor. https://developer.apple.com/reference/appkit/nsalert/1534314-helpanchor

示例:

var alert = NSAlert()
alert.messageText = "Testing"
alert.helpAnchor = "https://google.com"
alert.showsHelp = true
alert.runModal()

那是行不通的,因为 URL 没有设置为帮助手册,要设置它请看:

https://developer.apple.com/library/content/documentation/Carbon/Conceptual/ProvidingUserAssitAppleHelp/using_ah_functions/using_ah_functions.html

打开外部网站:

https://developer.apple.com/library/content/documentation/Carbon/Conceptual/ProvidingUserAssitAppleHelp/authoring_help/authoring_help_book.html#//apple_ref/doc/uid/TP30000903-CH206-CIHEAADH

请注意,内置问号按钮仅支持打开内置帮助 window,不支持 Internet 浏览器。如果你想在网络浏览器中打开,你必须创建一个完整的自定义 NSAlert 并提供你自己的 accessoryView:

https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/Dialog/Articles/CustomAlertDialogs.html

您应该使您的控制器 class 符合 NSAlertDelegate
然后,设置 myAlert.delegate = selfmyAlert.showsHelp = true.
在你的控制器 class 中,实现 func alertShowHelp(_ alert: NSAlert) -> Bool 做任何你想做的事。

一般来说,要在用户的默认浏览器中打开 URL,请使用 NSWorkspace 及其 open() 方法。