gpt4 book ai didi

swift - 如何获取 NSStackView 作为 NSAlert 的附属 View ?

转载 作者:行者123 更新时间:2023-12-04 17:49:45 28 4
gpt4 key购买 nike

我正在 macOS 上使用 Swift 编写应用程序。我想创建一个带有垂直 NSStackView 的 NSAlert,让用户从 N 个选项中选择一个。为此,我将 NSStackView 连接到我的 NSAlert 的 accessoryView 属性中,但出于某种原因我的单选按钮没有显示。

这是我到目前为止尝试过的:

let a = NSAlert()
a.messageText = "Dummy1"
a.informativeText = "Dummy2"
a.addButton(withTitle: "OK")

let rb = NSButton(radioButtonWithTitle: "Foo", target: nil, action: nil)
a.accessoryView = rb

a.runModal()

这显示了我的 NSAlert 和一个标记为 Foo 的单选按钮。所以辅助 View 似乎有效。

现在我将单选按钮放在 StackView 中:

let a = NSAlert()
a.messageText = "Dummy1"
a.informativeText = "Dummy2"
a.addButton(withTitle: "OK")

let rb = NSButton(radioButtonWithTitle: "Foo", target: nil, action: nil)
let vsv = NSStackView()
vsv.orientation = NSUserInterfaceLayoutOrientation.vertical
vsv.distribution = NSStackViewDistribution.equalSpacing
vsv.alignment = .leading
vsv.isHidden = false
vsv.addView(rb, in: .center)

a.accessoryView = vsv

a.runModal()

现在单选按钮不再出现。在 StackView 中添加更多单选按钮也无济于事。

最佳答案

我能够让它工作,但我没有设置任何限制,因为我只需要一个固定大小。下面是一个堆叠两个具有固定宽度的文本字段的示例:

func makeAccessoryView(usernameField: NSTextField, passwordField: NSTextField) -> NSView {
let stackView = NSStackView(views: [usernameField, passwordField])
let width = 300
let height = usernameField.frame.height + stackView.spacing + passwordField.frame.height
stackView.setFrameSize(NSSize(width: width, height: height))
stackView.translatesAutoresizingMaskIntoConstraints = true
stackView.orientation = .vertical
return stackView
}

// somewhere else...
let usernameField = NSTextField(...)
let passwordField = NSTextField(...)
alert.accessoryView = makeAccessoryView(usernameField: usernameField, passwordField: passwordField)

关于swift - 如何获取 NSStackView 作为 NSAlert 的附属 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46009170/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com