[英]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.