TMI에서 Michael Helmbrecht은 인기있는 모바일 질문에 대해서 자세하게 답변을 합니다.
지금까지 인기있는 답을 찾기위해 웹을 뒤적거렸나요? 사용자가 앱의 컨텐츠를 자세하게 볼 수 있게 안드로이드와 iOS에서 거슬리는 키보드를 코드로 숨기는 방법을 설명합니다.
안녕하세요 저는 Realm에서 일하는 Michael입니다. 오늘은 안드로이드와 iOS 앱을 개발하면서 많이 나오는 질문인 ‘어떻게 가상 키보드를 사라지게 할까?’ 에 대한 답을 하려고 합니다.
가상 키보드는 종종 화면의 일부를 가려 사용성을 해칩니다. 키보드를 숨기면 사용자가 앱에서 더 많은 내용을 볼 수 있습니다. 자바와 오브젝티브-C, 스위프트에서 빠르게 이 문제를 해결하는 방법에 대해서 알아보겠습니다.
Android
키보드를 사라지게 하는 것은 안드로이드에서는 어렵지 않습니다. 아래의 코드를 보면 간단한 두 라인을 볼 수 있습니다.
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
InputMethodManager
에서 참조하여 얻은 getSystemService
를 사용할 수 있습니다. 즉, 키보드를 추적하는 객체입니다. 어떤 하드웨어 장치를 가지고 있다고 해도 키보드 뿐만 아니라 많은 것을 관리 할 수 있습니다. 그런 다음 hideSoftInputFromWindow
메소드를 호출하면 됩니다.
중요한 것은 토큰이 필요한데 아래에서 조금더 이야기를 해볼겁니다. 토큰에서 전달하고 옵션 플레그가 0
으로 전달합니다.
토큰 주위를 조금 살펴보면, 현재 포커스 뷰를 얻어서 이를 사용하면 됩니다.
View view = this.getCurrentFocus();
if (view != null) {
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
보고자 하는 뷰를 가지기 위해 getCurrentFocus
를 메소드가, null인지 체크해야합니다. 이는 InputMethodManager를 전달하기 위해 필요한 윈도우 토큰을 얻는 방법입니다.
또 다른 방법은 InputMethodManager.HIDE_IMPLICIT_ONLY
로 옵션 플래그 0
을 대체하는 방법이 있습니다.
View view = this.getCurrentFocus();
if (view != null) {
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_IMPLICIT_ONLY);
}
이 코드는 암묵적으로 올라온 (자동으로 올라온) 키보드를 숨길 것입니다. 만약 사용자가 EditText를 클릭한다면 즉, 사용자가 키보드가 보여지기 원하는 명시적인 행동을 한 경우에도 우리가 명시적으로 키보드를 숨겼기 때문에 이 메소드는 어떤 일도 발생 시키지 않을 것입니다. 하지만, 백그라운드에서 다른 종류의 프로세스가 있거나, 어떤 경우에서건 암묵적으로 포커스를 얻었다던지(사용자가 요청한 것이아닌) 하는 다른 메커니즘이 있다면 키보드가 보여질 것입니다.
이 플래그는 키보드를 사용자가 원할때 보여주는 경우 등에 사용할 수 있지만 여러 프로세스에서 간섭이 일어나 예기치 않은 동작을 불러오기도 합니다.
iOS
iOS는 실제로 더 쉽습니다. 코드 한 줄이면 됩니다.
Objective-C
[self.view endEditing:YES];
Swift
self.view.endEditing(true);
어느 뷰에서나 endEditing
을 호출할 수 있고 오브젝티브-C에서는 YES
, 스위프트에서는 true
를 전달할 수 있습니다. 그 YES
(또는 true
)는 강제적인 불리언입니다. 이는 첫번째 응답자가 무엇을 하든 강제로 할 수 있습니다. 이것은 자동적으로 조사하고 응답자가 키보드를 위로 하고, 사라지게 하는 것을 알아냅니다.
많이 사람들이 하위 계층 구조를 통해 이를 반복하는 글들을 인터넷에서 봤습니다. 하지만 그렇게 할 필요 없습니다. endEditing
라고 하는 것이 이미 알아서 해줄 것입니다. 원하는 뷰에서 키보드를 이동하고 싶으면 부르면 됩니다.
더 알아보기
- Reto Meier and Community : answer to “Close/hide the Android Soft Keyboard”
- memmons : answer to “How to get the currently active UITextField/UITextView and resignFirstResponder?”
컨텐츠에 대하여
이 컨텐츠는 저자의 허가 하에 이곳에서 공유합니다.