NSAlert 中的多个 NSTextField - MacOS
Multiple NSTextField in an NSAlert - MacOS
我正在 MacOS 上使用 Swift 4 中的 NSAlert 组合登录对话框。这是我到目前为止的代码:
func dialogOKCancel(question: String, text: String) -> (String, String) {
let alert = NSAlert()
alert.messageText = question
alert.informativeText = text
alert.alertStyle = .warning
alert.addButton(withTitle: "Login")
alert.addButton(withTitle: "Cancel")
let unameField = NSTextField(frame: NSRect(x: 0, y: 0, width: 200, height: 24))
let passField = NSSecureTextField(frame: NSRect(x: 0, y: 0, width: 200, height: 24))
let stackViewer = NSStackView()
stackViewer.addSubview(unameField)
alert.accessoryView = stackViewer
let response: NSApplication.ModalResponse = alert.runModal()
if (response == NSApplication.ModalResponse.alertFirstButtonReturn) {
return (unameField.stringValue, passField.stringValue)
} else {
return ("", "")
}
}
当我执行 alert.accessoryView = passField
时,这可以很好地显示 unameField
或 passField
。但我想在同一个对话框中显示这两个字段。如您所见,我已经尝试使用 NSStackView(和其他),但我还没有找到显示这两个元素的解决方案。
希望能帮到你...
您可以使用 NSStackView 和 addSubview 2 项:unameField 和 passField。
但是你必须为 NSStackView 和 NSStackView 上的 2 个项目设置框架。
这是我的代码,你可以参考:
let unameField = NSTextField(frame: NSRect(x: 0, y: 2, width: 200, height: 24))
let passField = NSSecureTextField(frame: NSRect(x: 0, y: 28, width: 200, height: 24))
let stackViewer = NSStackView(frame: NSRect(x: 0, y: 0, width: 200, height: 58))
stackViewer.addSubview(unameField)
stackViewer.addSubview(passField)
alert.accessoryView = stackViewer
这是我的结果:
my result
我正在 MacOS 上使用 Swift 4 中的 NSAlert 组合登录对话框。这是我到目前为止的代码:
func dialogOKCancel(question: String, text: String) -> (String, String) {
let alert = NSAlert()
alert.messageText = question
alert.informativeText = text
alert.alertStyle = .warning
alert.addButton(withTitle: "Login")
alert.addButton(withTitle: "Cancel")
let unameField = NSTextField(frame: NSRect(x: 0, y: 0, width: 200, height: 24))
let passField = NSSecureTextField(frame: NSRect(x: 0, y: 0, width: 200, height: 24))
let stackViewer = NSStackView()
stackViewer.addSubview(unameField)
alert.accessoryView = stackViewer
let response: NSApplication.ModalResponse = alert.runModal()
if (response == NSApplication.ModalResponse.alertFirstButtonReturn) {
return (unameField.stringValue, passField.stringValue)
} else {
return ("", "")
}
}
当我执行 alert.accessoryView = passField
时,这可以很好地显示 unameField
或 passField
。但我想在同一个对话框中显示这两个字段。如您所见,我已经尝试使用 NSStackView(和其他),但我还没有找到显示这两个元素的解决方案。
希望能帮到你...
您可以使用 NSStackView 和 addSubview 2 项:unameField 和 passField。 但是你必须为 NSStackView 和 NSStackView 上的 2 个项目设置框架。
这是我的代码,你可以参考:
let unameField = NSTextField(frame: NSRect(x: 0, y: 2, width: 200, height: 24))
let passField = NSSecureTextField(frame: NSRect(x: 0, y: 28, width: 200, height: 24))
let stackViewer = NSStackView(frame: NSRect(x: 0, y: 0, width: 200, height: 58))
stackViewer.addSubview(unameField)
stackViewer.addSubview(passField)
alert.accessoryView = stackViewer
这是我的结果:
my result