在Swiftui中管理键盘:全面的教程
#mobile #ios #swift #swiftui

管理键盘的外观和行为是在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:)方法来收听keyboardWillShowNotificationkeyboardWillHideNotification通知。

现在,让我们实现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外或“完成”按钮来解散键盘。

  1. 在外面敲击:
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()
    }
}
  1. 使用完成按钮:
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中管理键盘的坚实基础。愉快的编码!