iOS 응용 (swift)
[iOS - swift] textField 키보드 위 버튼 (keyboard 위 버튼, 키보드 내리는 방법, 키보드 이벤트, inputAccessoryView, endEditing, tableView)
jake-kim
2021. 9. 6. 21:46
keyboard 바로 위에 버튼 표출

- 구현 방법
- TextField, TextView안에 내장된 inputAccessoryView 프로퍼티에 UIView 대입
- UIView.addSubview로 Button 추가

- textField나 TextView의 receiver가 becomeFirstResponse가 된 경우, 키보드가 표출할떄 키보드 위의 영역
- nil이 디폴트값이고 따로 View를 추가하여 대입 필요

- inputAccessoryView에 대입할 View 정의
lazy var accessoryView: UIView = {
return UIView(frame: CGRect(x: 0.0, y: 0.0, width: UIScreen.main.bounds.width, height: 72.0))
}()
- textField의 inputAccessoryView에 대입
lazy var textField: UITextField = {
let view = UITextField()
view.inputAccessoryView = accessoryView // <-
view.placeholder = "입력 창"
view.textAlignment = .center
view.layer.borderWidth = 1
view.layer.borderColor = UIColor.gray.cgColor
return view
}()
- autolayout constraint 설정
accessoryView.addSubview(confirmButton)
guard let confirmButtonSuperview = confirmButton.superview else { return }
confirmButton.translatesAutoresizingMaskIntoConstraints = false
confirmButton.leadingAnchor.constraint(equalTo: confirmButtonSuperview.leadingAnchor, constant: 16).isActive = true
confirmButton.trailingAnchor.constraint(equalTo: confirmButtonSuperview.trailingAnchor, constant: -16).isActive = true
confirmButton.heightAnchor.constraint(equalToConstant: 56).isActive = true
빈 화면 터치 시 키보드 내리기

- 구현 방법
- view에 tapGesture를 추가
- tapGesture가 발생하면, view.endEditing(true)를 실행
- emdEdotomg(_:): 해당 view에 내장된 textField에 대해서 first responder를 resign 시켜버리는 메소드

- tapGesture를 ViewController의 view에 추가하여 구현
private func addTapGesture() {
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(hideKeyboard(_:)))
view.addGestureRecognizer(tapGesture)
}
@objc
private func hideKeyboard(_ sender: Any) {
view.endEditing(true)
}
키보드 hide, show 이벤트 수신 방법
- NotificationCenter 사용
NotificationCenter.default.addObserver(self,
selector: #selector(keyboardWillShow),
name: UIResponder.keyboardWillShowNotification,
object: nil)
NotificationCenter.default.addObserver(self,
selector: #selector(keyboardWillHide),
name: UIResponder.keyboardWillHideNotification,
object: nil)
* 전체 코드: https://github.com/JK0369/textFieldEx
TableView에서 scroll 시 키보드 내리는 방법

- tableView의 keyboardDismissMode 프로퍼티 사용
tableView.keyboardDismissMode = .onDrag
* tableView관련 전체 코드: https://github.com/JK0369/SearchBarToNavigationItem
* 참고
- endEditing(_:): https://developer.apple.com/documentation/uikit/uiview/1619630-endediting
- inputAccessoryView: https://developer.apple.com/documentation/uikit/uiresponder/1621119-inputaccessoryview