본문 바로가기
iOS_Swift

Swift) 키보드 위로 Textfield 따라 올라오게 하기

by DevJake 2021. 6. 2.

키보드가 올라왔을 때

 

키보드가 숨겨졌을 때

 

검색하면 여러 Solution 들을 많이 찾아볼 수 있는데,

개인 프로젝트에서의 문제는 키보드 저 뒤에 뷰가 TableView이다 보니, 

처음엔 textField가 잘 올라왔다가도 위에 테이블 뷰를 건드리면 텍스트 뷰가 또 사라지는 문제가 있었다. 

 

기존 코드에서는 보통 TextField만 올리지 않고 전체 view를 모두 올려버리기 때문이다. 

아래는 stackOverFlow 에서 검색해서 얻은 코드이다. 

위 코드에서 내용중에서 

키보드가 나올 것 같으면, viewController의 self.view의 위치를 키보드 높이만큼 계산해서 올려버리는 것이다. 

그런데 기존 뷰에 TableView가 있는 경우, Tableview 부분을 클릭해서 스크롤을 해보면

키보드는 그대로 있는데 TextField는 원래 자리로 돌아가버려 화면에서 사라져버리는 문제가 있었다. 

 

그래서.. 

전체 뷰인 self.view 가 아닌, TextField를 포함하는 뷰만 따로 움직이도록 했다. 

 

먼저 TableView와 TextField 포함하는 뷰 그리고, TextField는 Storyboard 상에서 모두 Align을 잡고 시작했다. 

textView의 처음 위치값을 저장할 var 변수를 만들고 

아래와 같이 전체 view가 아닌 특정 view(TextField를 포함하는 뷰)만 이동하도록 했다 .

최종 코드

필자는 keyboardWillShow를 사용하지 않고, keyboardDidShow를 사용했다. 

WillShow를 사용할 경우, textView의 y 위치와 키보드 사이즈를 정상적으로 잡지 못하는 문제가 있어서 DidShow를 사용해야 그러한 문제가 없었다.

이건 어떤 뷰를 사용하느냐에  조금 차이가 있을것 같다. 

 

좀 특이한 것은, 

처음에 키보드를 올라오게 할때

resignFirstResponder() 를 이용했는데, 

TextField창이 열리고 첫 글을 적기 시작하면, 

이 녀석이 두번 읽히는 바람에 TextField 가 하늘로 날아가 버리는(?) 문제가 발생했다. 

희한한건.. 이건 첫 글 적을 때만 그렇고 다른 뷰를 갔다오면 중복 읽음이 해제된다;;;;;;;

이유는 모르겠지만,, 어쨌건 해결은 해야하니, 

 

아래와 같이 YValue가 0 일때, 라는 조건식을 달고야 그런 현상을 잡을 수 있었다. 

 

댓글