可以让回车/返回键激活带有文本字段的 SwiftUI 警报上的“确定”按钮吗?

问题描述 投票:0回答:1

我的

Alert
应用程序中有一个
SwiftUI

.alert("Project Name:", isPresented: self.$alertPresented)
{
    TextField("", text: self.$userInput)
    /*.onSubmit
    {
        okButtonPushed()
        self.alertPresented = false
    }*/
    Button("Cancel", role: .cancel) { }
    Button("OK")
    {
        okButtonPushed()
    }
    .disabled(userInput.isEmpty)//.keyboardShortcut(.return)
}

它正常工作,但我想做的是,当用户在 MacOS 上按下 Return 或 Enter 键时,就像用户单击 OK

Button
一样。我还希望突出显示 OK
Button
,以便用户清楚他们可以按回车键/回车键来激活它。

到目前为止我已经尝试了两种不同的方法。首先,我在

.onSubmit
上附加了
TextField
。当我按 Enter 或 Return 时,它可以工作,但不会消除
Alert
(即使我将
$self.alertPresented
设置为
false

第二个,我尝试将

.keyboardShortcut(.return)
附加到 OK
Button
本身,但这只是出于某种原因突出显示取消
Button
(与我想突出显示 OK
Button
的方式大致相同) ,当我按回车键/或输入键时,
Alert
消失了,就像有人单击了取消
Button
一样。

所以,只是想知道这是否可以采用我上面的格式,其中

Alert
有一个
TextField
,以及何时全部在连接到
.alert
Button
外壳中完成。谢谢你。

ios macos button swiftui alert
1个回答
0
投票

您正在寻找

.defaultAction
键盘快捷键。

默认按钮的标准键盘快捷键,由 Return (↩) 键组成,不含修饰键。

在 macOS 上,默认按钮被指定为特殊颜色。如果为多个控件分配了此快捷方式,则仅强调第一个控件。

.alert("Project Name:", isPresented: self.$alertPresented)
{
    TextField("", text: self.$userInput)
    Button("OK") { print("OK Pressed!") }
        .disabled(userInput.isEmpty)
        .keyboardShortcut(.defaultAction)
    Button("Cancel", role: .cancel) { }
}

请注意,您应该将“取消”按钮放在“确定”按钮之后。看起来带有

role: .cancel
的按钮也隐式是
.defaultAction
,所以我们需要先放置 OK 按钮才能突出显示它。

© www.soinside.com 2019 - 2024. All rights reserved.