티스토리 뷰

반응형


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


오늘은 TextField에 대해서 배워볼건데요 :)

TextField를 쓰다보면 반드시 접하는 이슈..!

바로




이 문제죠.

바로 키보드에 의해 TextField가 가려지는 현상입니다.

간단하게 오늘 할 것을 말씀드리면,

키보드에 의해 TextField가 가려지는 현상을 해결하는 거에요.


키보드에의해 텍스트필드가 가려지는 것을 해결


결과적으로 우리는 TextField가 키보드에의해 안가려졌으면 하죠?

그러면 TextField를 올렸다가, 편집이 끝나면 올렸던 TextField를 다시 내리면됩니다.


class ViewController: UIViewController ,UITextFieldDelegate{ 


override func viewDidLoad() {

super.viewDidLoad()

textField.delegate = self

NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow(_:)), name: UIResponder.keyboardWillShowNotification, object: nil)


NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide(_:)), name: UIResponder.keyboardWillHideNotification, object: nil)

}

}


NotificationCenter를 이용해서 키보드가 이제 올라간다, 키보드 이제 사라질거야!! 라는 것을 알려줄거에요. 


저 name에 해당하는게 .UIKeyboardWillShow죠? 저 name파라미터는 옵저버를 등록할 알림의 이름입니다.

만약 키보드가 이제 보여질거야! 하면 옵저버에게 알려주고, selector에 있는 함수가 실행되게 되죠.


그럼 우리는 이제 키보드가 나타날거야!! 하면 뭘 해주면 될까요? 

네. TextField를 올려주면 되겠죠?


keyboardWillShow()함수에는 TextField를 올려주는 작업을 하면 되겠네요. 


@objc

func keyboardWillShow(_ sender: Notification) {

     self.view.frame.origin.y = -150 // Move view 150 points upward

    }


헷갈릴 수도 있는 것은 -150하면 내려가는거 아냐? 라고 생각하실 수도 있는데.. 

-150을 할당해주는 곳을 보세요. 현재 view의 y좌표를 편집해주는 것인데, 당연히 마이스값을 넣어줘야 위로 view가 올라가겠죠?

저 값은 본인의 앱에 맞게 고쳐주시면 된답니다. 


이제 키보드를 내려줄 차례네요. 

각자 키보드를 내릴 특정한 상황이 있을 텐데, 키보드가 내려갈때는 당연히

이 메소드가 불리게 됩니다.


@objc

func keyboardWillHide(_ sender: Notification) {

// Code

}



우리는 아까 keyboardWillShow()함수를 통해서 뷰의 y좌표에 마이너스 값을 대입하여 뷰를 올려주었어요. 

그럼 이 뷰를 내릴려면 어떻게하면 될까요? 

네. 다시 원래 있던 자리로 돌려주면 되겠죠?



@objc

func keyboardWillHide(_ sender: Notification) {

self.view.frame.origin.y = 0 // Move view to original position

}


짠, y값을 다시 0으로 만들어주었어요:)


자 이제 실행해보면, 



이렇게 TextField가 올라감으로써 키보드에 안가려지는 것을 볼 수 있죠? 


전체 소스코드도 첨부합니다. ㅎㅎ


어떠신가요 :) 쉽죠? 

도움이 되었으면 좋겠습니다 ㅎㅎ

반응형