You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SwiftUI Menu中添加TextField无法输入,如何实现菜单内输入?

在SwiftUI Menu中实现输入功能的解决方案

SwiftUI原生Menu组件的设计定位是提供选择类交互,内部的交互式输入控件(比如TextField)无法正常获取输入焦点,这就是你遇到“能显示但无法输入”的原因。原生Menu并不支持这类输入场景,推荐用以下方案替代:

方案:用Button+Popover实现类似Menu的输入弹窗

通过按钮触发弹窗,在弹窗中放置输入框和操作按钮,既保留类似Menu的弹出体验,又能正常支持输入:

@State private var isPopoverShown = false
@State private var awardedAmount = ""

var body: some View {
    Button("Award Users") {
        isPopoverShown = true
    }
    .popover(isPresented: $isPopoverShown) {
        VStack(spacing: 16) {
            TextField("输入金额", text: $awardedAmount)
                .textFieldStyle(.roundedBorder)
                .padding(.horizontal)
            
            Button("发送") {
                // 在这里处理发送逻辑
                isPopoverShown = false
            }
            .buttonStyle(.borderedProminent)
        }
        .padding()
        .frame(width: 300)
    }
}

补充说明

如果尝试强行在原生Menu内让TextField获取焦点,虽然可以通过@FocusState强制设置,但Menu的内部交互逻辑会频繁干扰输入状态,导致体验不稳定,因此不推荐这种做法。用popover或sheet实现是更可靠的方案。

内容的提问来源于stack exchange,提问作者Noah Iarrobino

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 17:50:29