티스토리 뷰
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을 사용할 수 있도록 해준다.
'macOS, iOS' 카테고리의 다른 글
[iOS] string to enum은 initializer밖에 안됨 (0) | 2020.04.10 |
---|---|
[iOS] Info.plist 다국어 지원하기 (0) | 2020.04.06 |
[iOS] firestore 함수들 정리 (0) | 2020.04.01 |
[iOS] background에서 TTS 실행해주기 (0) | 2020.03.31 |
[iOS] TTS 다국어 지원하기 (0) | 2020.03.27 |