管理键盘的外观和行为是在iOS应用中创建无缝用户体验的重要方面。在Swiftui中,当系统自动管理许多操作时,有时您需要更多的控制。
我们一直在为iOS app templates使用所有这些技巧和技巧。让我们深入研究如何处理Swiftui中的键盘。
1.键盘处理简介
当用户在SwiftUI中的TextField
上敲击时,系统会自动显示键盘。但是,如果键盘遮盖了UI的TextField
或其他重要元素,则可能会出现问题。
2.响应键盘外观
要管理键盘的外观并避免使用UI遮挡,您可以使用keyboardAdaptive()
修饰符。但是在此之前,您需要观察键盘的高度。
final class KeyboardResponder: ObservableObject {
@Published var currentHeight: CGFloat = 0
var keyboardWillShowNotification = NotificationCenter.default.publisher(for: UIResponder.keyboardWillShowNotification)
var keyboardWillHideNotification = NotificationCenter.default.publisher(for: UIResponder.keyboardWillHideNotification)
init() {
keyboardWillShowNotification.map { notification in
CGFloat((notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect)?.height ?? 0)
}
.assign(to: \.currentHeight, on: self)
.store(in: &cancellableSet)
keyboardWillHideNotification.map { _ in
CGFloat(0)
}
.assign(to: \.currentHeight, on: self)
.store(in: &cancellableSet)
}
private var cancellableSet: Set<AnyCancellable> = []
}
在这里,我们使用Combine的publisher(for:)
方法来收听keyboardWillShowNotification
和keyboardWillHideNotification
通知。
现在,让我们实现keyboardAdaptive
修饰符。
struct KeyboardAdaptive: ViewModifier {
@ObservedObject private var keyboard = KeyboardResponder()
func body(content: Content) -> some View {
content
.padding(.bottom, keyboard.currentHeight)
.animation(.easeOut(duration: 0.16))
}
}
用法:
TextField("Enter text", text: $inputText)
.modifier(KeyboardAdaptive())
3.使用Swiftui键盘动画
您注意到我们在keyboardAdaptive
修饰符中添加了动画。这样可以确保当键盘出现或消失时,填充调整是动画的,为用户提供了平稳的体验。
4.解散键盘
在某些情况下,您可能希望用户通过敲击TextField
外或“完成”按钮来解散键盘。
- 在外面敲击:
extension View {
func endEditing() {
UIApplication.shared.sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil)
}
}
// Usage:
var body: some View {
VStack {
TextField("Enter text", text: $inputText)
}
.onTapGesture {
self.endEditing()
}
}
- 使用完成按钮:
var body: some View {
VStack {
TextField("Enter text", text: $inputText)
Button("Done") {
self.endEditing()
}
}
}
5.键盘自定义
SwiftUI允许您通过调整TextField
的修饰符来自定义键盘的外观和行为。
TextField("Enter email", text: $email)
.keyboardType(.emailAddress) // Sets the keyboard type
.autocapitalization(.none) // Disables auto-capitalization
.disableAutocorrection(true) // Disables auto-correction
结论:在SwiftUI中有效地管理键盘,可确保您的用户在与应用程序互动时享受平稳而直观的体验。通过观察键盘通知,对视图调整进行动画调整并合并一些方便的扩展,您可以创建一个抛光的UI,该UI无缝适应键盘事件。
有关更多开发文章,请查看dopebase programming tutorials。
我希望本教程为您提供了在Swiftui中管理键盘的坚实基础。愉快的编码!