SwiftUI Menu中添加TextField无法输入,如何实现菜单内输入?
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
相关产品推荐
相关产品推荐

