在包含选取器的SwiftUI窗体中隐藏键盘,可以通过以下步骤实现:
import SwiftUI
import Combine
@State private var isKeyboardVisible = false
struct HideKeyboard: ViewModifier {
@State private var keyboardHeight: CGFloat = 0
func body(content: Content) -> some View {
content
.padding(.bottom, keyboardHeight)
.onAppear(perform: subscribeToKeyboardEvents)
.onDisappear(perform: unsubscribeFromKeyboardEvents)
}
private func subscribeToKeyboardEvents() {
NotificationCenter.default.addObserver(
self,
selector: #selector(keyboardWillShow),
name: UIResponder.keyboardWillShowNotification,
object: nil
)
NotificationCenter.default.addObserver(
self,
selector: #selector(keyboardWillHide),
name: UIResponder.keyboardWillHideNotification,
object: nil
)
}
private func unsubscribeFromKeyboardEvents() {
NotificationCenter.default.removeObserver(
self,
name: UIResponder.keyboardWillShowNotification,
object: nil
)
NotificationCenter.default.removeObserver(
self,
name: UIResponder.keyboardWillHideNotification,
object: nil
)
}
@objc private func keyboardWillShow(notification: Notification) {
guard let keyboardFrame = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect else {
return
}
withAnimation {
keyboardHeight = keyboardFrame.height
}
}
@objc private func keyboardWillHide(notification: Notification) {
withAnimation {
keyboardHeight = 0
}
}
}
struct ContentView: View {
var body: some View {
VStack {
// 其他视图组件
Picker("选择器", selection: $selection) {
// 选项
}
.pickerStyle(.segmented)
.padding()
}
.modifier(HideKeyboard())
}
}
通过以上步骤,当用户点击选取器时,键盘将自动隐藏,提供更好的用户体验。
腾讯云相关产品和产品介绍链接地址:
领取专属 10元无门槛券
手把手带您无忧上云