SwiftUI로 키보드로 문자가 숨기지 않도록 처리를 넣을 수 있다

8512 단어 SwiftSwiftUI키보드

UIKit과 마찬가지로 키보드가 닫히는 처리는 원래 들어 있지 않습니다.


  • iOS 개발을 하면 반드시 직면하는 키보드를 닫는 처리.
  • Return 키를 누르거나 다른 부분을 탭했을 때 닫거나 키보드로 입력되는 문자가 숨기지 않도록 스스로 처리를 작성해야 한다.
  • 이번에는 キーボードで入力される文字が隠れないようにする 처리 만들기
  • UIKit 때와 마찬가지로 NotificationCenter를 사용하여 키보드를 모니터링합니다.

  • 구현



    키보드를 모니터링하는 클래스


    
    import SwiftUI
    import Combine
    
    class KeyboardObserver: ObservableObject {
    
      @Published var keyboardHeight: CGFloat = 0.0
    
      /// Observerの追加
      func addObserver() {
        NotificationCenter
          .default
          .addObserver(self,
                       selector: #selector(self.keyboardWillChangeFrame(_:)),
                       name: UIResponder.keyboardWillChangeFrameNotification,
                       object: nil)
      }
    
      /// Observerの削除
      func removeObserver() {
        NotificationCenter
          .default
          .removeObserver(self,
                          name: UIResponder.keyboardWillChangeFrameNotification,
                          object: nil)
      }
    
      /// キーボードのフレーム検知処理
      /// - Parameter notification: Notification
      @objc func keyboardWillChangeFrame(_ notification: Notification) {
        if let endFrame = notification
          .userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue,
        let beginFrame = notification
          .userInfo?[UIResponder.keyboardFrameBeginUserInfoKey] as? NSValue {
          let endFrameMinY: CGFloat = endFrame.cgRectValue.minY
          let beginFrameMinY: CGFloat = beginFrame.cgRectValue.minY
    
          self.keyboardHeight = beginFrameMinY - endFrameMinY
          if self.keyboardHeight < 0 {
            self.keyboardHeight = 0
          }
        }
      }
    
    }
    
    

    View 클래스


    struct ContentView: View {
    
      @ObservedObject var keyboard = KeyboardObserver()
      @State var text: String = ""
    
      var body: some View {
        VStack {
          Spacer()
          Rectangle()
            .frame(width: 300, height: 300)
          TextField("入力", text: self.$text)
            .padding()
        }.onAppear(perform: {
          self.keyboard.addObserver()
        }).onDisappear(perform: {
          self.keyboard.removeObserver()
        }).padding(.bottom,
                   self.keyboard.keyboardHeight)
          .animation(.easeOut)
      }
    
    }
    

    실행 결과





    요약


  • SwiftUI에서도 문자가 숨기지 않도록 처리를 넣을 수 있었다.
  • 다음은 다른 부분을 탭했을 때에도 닫히는 처리를 게재한다.
  • 좋은 웹페이지 즐겨찾기