簡體   English   中英

Swift:如何在 NSAlert 中制作 NSTextField 第一響應者

[英]Swift: How to make NSTextField first responder in NSAlert

我有一個簡單的登錄對話框,要求輸入密碼。 模態框上有一個 NSSecureTextField。 我希望這是第一響應者,但我無法找到如何做到這一點?

func loginDialog(question: String) -> String 
{
    let alert = NSAlert()
    alert.messageText = question
    alert.alertStyle = .warning
    alert.addButton(withTitle: "Login")
    alert.addButton(withTitle: "Cancel")

    let passField = NSSecureTextField(frame: NSRect(x: 0, y: 24, width: 250, height: 24))
    let stackViewer = NSStackView(frame: NSRect(x: 0, y: 0, width: 250, height: 50))

    stackViewer.addSubview(passField)

    alert.accessoryView = stackViewer

    //this doesn't do anything :-(
    alert.window.makeFirstResponder(passField)

    let x = alert.runModal()
    if (x == NSApplication.ModalResponse.alertFirstButtonReturn)
    {
        return (passField.stringValue)
    }
    else
    {
        return ("")
    }
}

我也無法讓 becomeFirstResponder 工作。

更新:我收到錯誤:錯誤:設置為 window 的第一響應者,但它位於不同的 window((null))中。 當視圖被釋放時,這最終會崩潰。 第一響應者將被設置為零。

所以我明白為什么,但不知道如何解決。

而不是 makeFirstResponder,使用這個:

alert.window.initialFirstResponder = passField

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM