Commonlife's Blog

My daily life

iOS : 키보드 상태에 따른 화면제어

with 2 comments

기존 소스에서 키보드가 올라오면 키보드를 제외한 화면을 터치하면 키보드가 내려가는 걸 구현하려 했다.

* 조건사항 : 키보드를 제외한 화면에 버튼들이 많다. (실제 동작하는 버튼들)

 

* 계획 :

1. 화면을 덮는 UIView를 만든다.

2. 해당 UIView는 setHidden:YES 상태로 초기화

3. 키보드가 올라오면 해당 UIView는 setHidden:NO

4. UIView를 터치하면 키보드를 내린다.

5. 키보드가 내려가면 해당 UIView는 다시 setHidden:YES가 된다.

 

* 진행 중 문제 상황

1. xib 파일이 언어별로 나뉘어 존재하고 있었는데(2개) 상위 xib 파일에서 UIView를 붙였더니 실제 xib파일에 공통으로 적용되지 않는다.

  • 해결 : 각 xib파일 마다 UIView를 붙였음.

2. UIView에 터치 이벤트가 적용되지 않는다. (UIControlEventTouchUpInside)

  • 해결 : 결국 투명한 UIButton으로 바꾸고 이벤트를 적용시켰다.

3. 키보드 레이아웃을 default를 했음에도 줄바꿈이 되지 않는다.

  • 해결 : 아래 메소드에서 @”\n”을 따로 처리하고 있었다.
  • (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text

 

* 부가적으로 키보드 상태를 알수 있는 메소드들

  • (BOOL)textViewShouldBeginEditing:(UITextView *)textView : 말그대로 키보드가 나오는 시점. 여기서 UIButton을 setHidden:NO
  • (BOOL)textViewShouldEndEditing:(UITextView *)textView : 키보드가 들어가는 시점. 여기서 UIButton을 setHidden:YES
  • (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
Advertisements

Written by tocommonlife

2012/09/25 , 시간: 02:54

2개의 답글

Subscribe to comments with RSS.

  1. UIView를 더하거나 버튼을 추가하지 말고, 버튼들이 잔뜩 있는 뷰를 xib에서 UIControl로 바꾸신 뒤, touch up inside로 연결해서 resignTextField 하면 되요.

    강상우

    2013/09/25 at 01:32

    • 감사합니다. 저는 안드로이드 개발 중인데 이 때 당시 아이폰 어플 수정할 일이 있어서 여기저기 부딪히며 할 때 였는데…. 아직도 아이폰 개발을 공부하고 싶다는 열망은 있는데 먹고사니즘으로 뒤로 미뤄지네요 ^^;;

      tocommonlife

      2013/09/25 at 01:48


답글 남기기

댓글을 게시하려면 다음의 방법 중 하나를 사용하여 로그인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중

%d 블로거가 이것을 좋아합니다: