macOS下SwiftUI Alert内嵌TextField时按钮无响应问题求助
macOS SwiftUI Alert嵌入TextField后OK按钮失效的解决办法
在macOS的SwiftUI Alert里添加TextField后,OK按钮的自定义操作(比如print("Done"))无法触发,移除TextField就恢复正常,这是macOS Alert的交互逻辑导致的——当Alert包含TextField时,系统默认会把OK按钮的行为和TextField的提交事件绑定,未显式配置的话自定义action会被忽略。
下面是两种亲测有效的修复方式:
方法一:给OK按钮标记默认快捷键
给OK按钮添加.keyboardShortcut(.defaultAction),明确它是Alert的默认操作,这样点击按钮或按回车都会触发你的代码:
@State private var showingAlert = false @State private var input = "" var body: some View { Button("Show Alert") { showingAlert = true } .alert("Enter your Name", isPresented: $showingAlert) { TextField("Your Name", text: $input) Button("OK") { print("Done") print("你输入的内容:\(input)") } .keyboardShortcut(.defaultAction) // 关键代码 } }
方法二:显式构建Alert实例
用Alert结构体直接定义弹窗内容,这种方式能更清晰地控制按钮的行为:
@State private var showingAlert = false @State private var input = "" var body: some View { Button("Show Alert") { showingAlert = true } .alert(isPresented: $showingAlert) { Alert( title: Text("Enter your Name"), primaryButton: .default(Text("OK")) { print("Done") print("你输入的内容:\(input)") }, secondaryButton: .cancel(), content: { TextField("Your Name", text: $input) } ) } }
注意:这个问题是macOS SwiftUI独有的,iOS上的Alert不会有这种情况,因为两者的弹窗交互逻辑不一样。
内容的提问来源于stack exchange,提问作者HunterLion
相关产品推荐
相关产品推荐

