Patrick's 데이터 세상
iOS - 글자 입력 컨트롤 본문
글자 입력 컨트롤
텍스트 필드
서치바
텍스트 뷰
글자 입력 방식
가상 키보드 사용
블루투스 키보드
텍스트 필드
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("키보드에 가림")
}
}
}
'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 |