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

SwiftUI中如何在键盘弹出时条件性显示不同视图

解决SwiftUI中键盘弹出时切换视图的问题

要实现点击TextField弹出键盘时切换显示不同视图,你可以按以下步骤修改代码:

  1. 添加状态变量跟踪键盘状态
    在ContentView中新增一个@State变量,用来记录键盘是否可见:
@State private var isKeyboardVisible = false
  1. 监听键盘通知更新状态
    先导入UIKit框架,再通过.onReceive修饰符监听键盘的显示/隐藏通知,更新isKeyboardVisible的值:
import UIKit

在外层VStack上添加监听逻辑:

.onReceive(NotificationCenter.default.publisher(for: UIResponder.keyboardWillShowNotification)) { _ in
    isKeyboardVisible = true
}
.onReceive(NotificationCenter.default.publisher(for: UIResponder.keyboardWillHideNotification)) { _ in
    isKeyboardVisible = false
}
  1. 修正视图切换逻辑
    替换代码中的注释判断,同时修正原代码里多余的大括号语法错误。

完整修改后的代码如下:

import SwiftUI
import UIKit

struct ContentView: View {
    @State private var text = ""
    @State private var isKeyboardVisible = false
    
    var body: some View {
        VStack {
            Spacer()
            if isKeyboardVisible {
                Text("Keyboard is shown")
            } else {
                VStack(alignment: .center, spacing: 16) {
                    Text("Enter prompts")
                        .font(.custom("Avenir Next Medium", size: 18))
                        .foregroundColor(.white)
                        .padding(.trailing, 230)
                    
                    TextField(text: $text) {
                        Text("Enter text here")
                    }
                    .frame(height: 120)
                    .cornerRadius(10)
                    .background(Color.gray.opacity(0.2)) // 可选:添加背景色提升TextField辨识度
                    
                    Text("create")
                        .opacity(text.isEmpty ? 0.4 : 1)
                }
                .padding(.horizontal)
            }
        }
        .onReceive(NotificationCenter.default.publisher(for: UIResponder.keyboardWillShowNotification)) { _ in
            isKeyboardVisible = true
        }
        .onReceive(NotificationCenter.default.publisher(for: UIResponder.keyboardWillHideNotification)) { _ in
            isKeyboardVisible = false
        }
    }
}

补充说明

  • 给TextField补充了占位符,让交互逻辑更清晰;
  • 可选的背景色可以让TextField在浅色背景下更易识别;
  • 键盘通知监听需绑定在外层容器上,确保能稳定接收通知。

内容的提问来源于stack exchange,提问作者Pavlo Kupyn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 05:33:28