티스토리 뷰

macOS, iOS

SwiftUI 키보드 닫기 처리

SweetDev 2020. 4. 6. 12:20

SwiftUI의 TextField에서 키보드 닫기 처리를 하려면 어떻게 해야할까?

 

SceneDelegate의

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {

 

메소드에 다음과 같은 코드를 추가해준다. 

 

// 모든 textField에서 바깥 영역을 터치했을 때 키보드를 닫기 위해서 추가.
    let tapGesture = AnyGestureRecognizer(target: window, action: #selector(UIView.endEditing))
    tapGesture.requiresExclusiveTouchType = false
    tapGesture.cancelsTouchesInView = false
    tapGesture.delegate = self // I don't use window as delegate to minimize possible side effects
    window?.addGestureRecognizer(tapGesture)

 

 

AnyGestureRecognizer도 선언해준다. UIGestureRecognizer를 상속받은 클래스이다. 

class AnyGestureRecognizer: UIGestureRecognizer {
  override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent) {
    state = .began
  }

  override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
    state = .ended
  }

  override func touchesCancelled(_ touches: Set<UITouch>, with event: UIEvent) {
    state = .cancelled
  }
}

 

SceneDelegate의 extension을 추가해준다. gestureRecognizer의 함수를 채택해서, 

extension SceneDelegate: UIGestureRecognizerDelegate {
  func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
    return true
  }
}

 

두개 이상의 gestureRecognizer을 사용할 수 있도록 해준다. 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함