Patrick's 데이터 세상

iOS - 글자 입력 컨트롤 본문

Programming/Swift

iOS - 글자 입력 컨트롤

patrick610 2020. 6. 23. 00:36
반응형
SMALL

글자 입력 컨트롤


   텍스트 필드
   서치바
   텍스트 뷰


   글자 입력 방식

      가상 키보드 사용
      블루투스 키보드


   
   텍스트 필드

      1줄 문자 입력 용도


      

      Capitalization : 대문자 사용
      Correction : 자동 고치기
      Spell Checking : 스펠링 체크
      Keyboard Type : 키보드 타입 ( 용도에 맞는 키보드 타입 사용 )
      Return Key : 리턴키 형식
      Secure Text Entry : 보안 키보드



텍스트 뷰

   여러 줄의 문자 입력


Search Bar

   검색어 입력

   
   서치바 속성

      배경이미지
      미니멀 스타일
      북마크 버튼 사용



   Search Bar and Search Display Controller

      검색어 입력
      검색 결과 출력용 테이블 뷰
      테이블 뷰 다루기

   


편집 이벤트


   글자 입력 관련 컨트롤은 편집 이벤트 사용

   


   입력 내용 변경 : Editing Changed
   편집 시작 : Editing Did Begin
   편집 종료 : Editing Did End
   편집 상태 종료 : Did End on Exit



   편집 종료 이벤트 구현

override func viewDidLoad() {
   // 엔터로 편집 상태 종료
   textField.addTarget(self, action: #selector(handleDidEnd),
      for: .editingDidEndOnExit)
}
func handleDidEnd() {
}

      엔터키가 없는 키보드 : 사용자의 다른 동작으로 키보드 감추기



      시뮬레이터 키보드 메뉴

         Simulator -> Hardware -> Keyboard
         맥의 물리 키보드로 키 입력
         키보드 감추기/보이기



   델리게이트(Delegate)

      텍스트 필드, 서치바, 텍스트 뷰의 이벤트
      이벤트 발생하면 처리 위임
      델리게이트 프로토콜


   최초 응답 객체

      
      응답 객체

      UIResponder 클래스
      사용자의 입력에 반응


      최초 응답 객체(first responder)

         현재 응답 중인 응답 객체

func isFirstResponder : Bool { get }
func becomeFirstResponder() -> Bool
func resignFirstResponder() -> Bool

 

// 텍스트 필드를 최초 응답 객체로 만들기(키보드 나타남)
textField.becomeFirstResponder()

// 텍스트 필드를 최초 응답 객체에서 해제(키보드 사라짐)
textField.resignFirstResponder()




         텍스트 필드 여러 개 일 때, 최초 응답 객체 찾는 방법

            뷰 구조에서 찾기
            편집 상태 전환 추적

            뷰 구조에서 최초 응답 객체 찾기

func findFirstResponder() -> UIResponder? {
   for v in self.view.subviews {
      if v.isFisrtResponder() {
         // EUREKA!
         
         return v
      }
   }
}

            뷰의 복합 구조도 고려해야 한다!

 

         편집 중인 텍스트 필드 추적

            텍스트 필드가 편집 상태로 전환되면 프로퍼티에 대입

var activeTextField : UITextField?

// 모든 텍스트필드의 Editing Did Begin 이벤트와 연결
@IBAction func textFieldEditingDidBegin(_ sender: UITextField) {
   activeTextField = sender
}

            편집 중인 텍스트 필드가 편집 종료되면 nil로 설정
            모든 텍스트 필드의 이벤트 연결 필요


         
         키보드 사용을 마치는 사용자 행위


             리턴 키 입력 : DidEndOnExit 이벤트
             키보드 외 영역 터치 : 터치 제스처
             스크롤 동작 : 스크롤 뷰


         
          키보드 감추기

              키보드 외 영역 터치
              씬 배경 터치로 감추기
              제스처 인식기(UITapGestureRecognizer)

// 배경 뷰에 탭 동작 인식기 추가
let gestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(handleTap))
self.view.addGestureRecognizer(gestureRecognizer)

// 씬 배경 터치시 최초 응답 객체에서 해제
func handleTap(_ gesture : UITapGestureRecognizer) {
   // 최초 응답 객체 찾기
   if let firstResponder = self.findFirstResponder() {
      firstResponder.resignFirstResponder()
   }
}

 


         키보드 관련 시스템 알림

            Notification.Name.UIKeyboardWillShow
            Notification.Name.UIKeyboardDidShow
            Notification.Name.UIKeyboardWillHide
            Notification.Name.UIKeyboardDidHide


         
         키보드로 인한 영역 변경

            컨텐츠 영역 = 뷰 높이 - 키보드 높이



         키보드 알림 감시

            알림 센터에 알림 감시자 등록/해제 : NotificationCenter

            self를 감시자로 등록 예제

NotificationCenter.default.addObserver(self,
   selector: #selector(keyboardWillShow),
   name: Notification.Name.UIKeyboardWillShow, object: nil)



            키보드에 가려지는 지 정보 얻기

func keyboardWillShow(_ noti : Notification) {
   if let rectObj = noti.userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue
   {
      let keyboardRect = rectObj.cgRectValue
      // 최초 응답 객체 찾기
      let textField = findFirstResponder() as! UITextField
      // 키보드에 가리는지 체크
      if keyboardRect.contains(textField.frame.origin) {
         print("키보드에 가림")
      }
   }
}

 

반응형
LIST

'Programming > Swift' 카테고리의 다른 글

iOS - 스크롤 뷰  (0) 2020.06.23
iOS - 다이얼로그와 피커  (0) 2020.06.23
iOS - 인터렉티브 씬  (0) 2020.06.23
iOS - 스택뷰, 적응형 UI  (0) 2020.06.23
iOS - 레이아웃  (0) 2020.06.23