From 8bf24a3afe455ae71a2dc8661914daa3615743f0 Mon Sep 17 00:00:00 2001 From: jinyaqiu Date: Mon, 1 Sep 2025 14:10:44 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E9=94=AE=E7=9B=98=E6=8F=90=E5=89=8D?= =?UTF-8?q?=E5=8A=A0=E8=BD=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- wake/View/Owner/UserInfo/UserInfo.swift | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/wake/View/Owner/UserInfo/UserInfo.swift b/wake/View/Owner/UserInfo/UserInfo.swift index 30df97f..b2b8ab4 100644 --- a/wake/View/Owner/UserInfo/UserInfo.swift +++ b/wake/View/Owner/UserInfo/UserInfo.swift @@ -20,12 +20,35 @@ struct UserInfo: View { @State private var isKeyboardVisible = false @FocusState private var isTextFieldFocused: Bool + // 使用静态属性来确保只初始化一次 + private static let keyboardPreloader: Void = { + let textField = UITextField() + textField.autocorrectionType = .no + textField.autocapitalizationType = .none + textField.spellCheckingType = .no + textField.isHidden = true + + if let window = UIApplication.shared.windows.first { + window.addSubview(textField) + textField.becomeFirstResponder() + textField.resignFirstResponder() + DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { + textField.removeFromSuperview() + } + } + }() + private let keyboardPublisher = NotificationCenter.default.publisher(for: UIResponder.keyboardWillShowNotification) .map { _ in true } .merge(with: NotificationCenter.default.publisher(for: UIResponder.keyboardWillHideNotification) .map { _ in false }) .receive(on: RunLoop.main) + init() { + // 在初始化时预加载键盘 + _ = UserInfo.keyboardPreloader + } + var body: some View { ZStack { // 背景色 @@ -229,6 +252,7 @@ struct UserInfo: View { NotificationCenter.default.addObserver(forName: UIResponder.keyboardWillHideNotification, object: nil, queue: .main) { _ in withAnimation(.easeInOut(duration: 0.3)) { isKeyboardVisible = false + // 当键盘隐藏时,确保预加载的TextField失去焦点 } } }