티스토리 뷰

반응형

안녕하세요 :) Zedd입니다.

보통 키보드가 올라와있는 상태에서, 화면을 누르면 키보드가 내려가게 하는 걸 touchesBegan으로 많이 하실겁니다. 참고 : <화면터치하여 키보드 내리기>

근데 ScrollView ⊂ View에서 touchesBegan이 호출이 안되길래..

왜인가 하고 찾아봤더니..ScrollView에서는 스크롤을 해야되니까 터치를 해야하잖아요? 스르륵하고..

그래서 우리가 생각하는 탁! 하는 터치 한번은 그냥 먹어버린다?고 합니다.

그래서 touchesBegan이 안불리는 거죠. touchesMoved도 안불리는건 당연하겠죠?


그래서 이걸 어떻게 해결하냐!

ScrollView에 UITapGestureRecognizer를 추가하는 방법으로 해결할 수 있습니다. 

viewDidLoad()에

let singleTapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(MyTapMethod))

singleTapGestureRecognizer.numberOfTapsRequired = 1

singleTapGestureRecognizer.isEnabled = true

singleTapGestureRecognizer.cancelsTouchesInView = false

myScrollView.addGestureRecognizer(singleTapGestureRecognizer)

사실 첫번째 UITapGestureRecognizer를 선언해주는 부분과 마지막 addGestureRecognizer만 해도 되긴 되는데...흐음 모르겠네요..

아무튼 viewDidLoad에 해주셨으면, selector에 넣어준 함수를 작성해야합니다. 

func MyTapMethod(sender: UITapGestureRecognizer) {

        self.view.endEditing(true)

    }

이렇게요.

그러면 이제 키보드가 올라와 있는 상태에서 아무 화면이나 누르면 키보드가 사라지게 됩니다.


다른방법은 UIScrollViewDelegate를 사용하는 방법인데요, 터치말고 스크롤을 하면 키보드가 없어지도록 할 수 있죠?

바로 func scrollViewWillBeginDragging(_ scrollView: UIScrollView)로요.

func scrollViewWillBeginDragging(_ scrollView: UIScrollView){

        self.view.endEditing(true)

    }

UIScrollViewDelegate를 채택하고, 대리자위임하고, 위 메소드를 사용하면 스크롤시 키보드가 사라지게 됩니다.

나는 둘다해줘야지~.~


반응형