대체 제목 뭐라고 지어요..
화면에 여러 개의 텍스트필드가 있는 경우 & textFieldShouldReturn 메서드 사용하여 다른 텍스트필드로 이동하는 경우,
위치에 따라 키보드 때문에 가려지는 경우가 있음..
키보드 위로 해당 텍스트필드가 오도록 화면을 올려버리자 하고 만들어보았다..
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .white
firstInputField.delegate = self
secondInputField.delegate = self
buildViewHierarchy()
setupConstraints()
setupUI()
setupTap()
//Set Observer to scroll when keyboard shows
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow(notification:)), name: UIResponder.keyboardWillShowNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide(notification:)), name: UIResponder.keyboardWillHideNotification, object: nil)
}
@objc func keyboardWillShow(notification: NSNotification) {
if let keyboardSize = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue {
let contentInsets = UIEdgeInsets(top: 0, left: 0, bottom: keyboardSize.height, right: 0)
scrollView.contentInset = contentInsets
scrollView.scrollIndicatorInsets = contentInsets
if secondInputField.isFirstResponder {
let rect = scrollView.convert(secondInputField.frame, from: secondInputField.superview)
scrollView.scrollRectToVisible(rect, animated: true)
}
}
}
@objc func keyboardWillHide(notification: NSNotification) {
let contentInsets = UIEdgeInsets.zero
scrollView.contentInset = contentInsets
scrollView.scrollIndicatorInsets = contentInsets
}
키보드 옵저버 달아주고.. 액션 만들어주면.. 끝
키보드 사이즈 계산해서 올려주면.. 됨...
이 끝은 아니고
이걸 만들기 위해..
스크롤뷰를 만들어서 UI 요소들을 다 때려넣어줬음..
스크롤뷰를 만드는 방법은... 생략...
예시의 경우 텍스트필드가 2개밖에 없고 1번 텍스트필드는 가려질 리가 없어서....? 아마도......?
2에만 적용시켜주었지만,
텍스트필드가 더 많이 있을 경우 동일한 방법으로 적용시켜주면 될 듯
나중에 또 까먹을 것이 분명하여 기록해두는 포스팅,,
'iOS' 카테고리의 다른 글
iOS ) weak self / unowned self 비교 (0) | 2023.10.04 |
---|---|
iOS) 커스텀 그라데이션 스위치 만들기 (0) | 2023.09.15 |
iOS ) UITextField - 커스텀 클리어 버튼 만들기.. (0) | 2023.06.20 |
iOS ) TextField - placeholder 글자 색 변경(?) (0) | 2023.06.19 |
iOS ) 키체인 CRUD 모델 및 테스트 (0) | 2023.06.13 |