관리 메뉴

김종권의 iOS 앱 개발 알아가기

[iOS - swift] textField 키보드 위 버튼 (keyboard 위 버튼, 키보드 내리는 방법, 키보드 이벤트, inputAccessoryView, endEditing, tableView) 본문

iOS 응용 (swift)

[iOS - swift] textField 키보드 위 버튼 (keyboard 위 버튼, 키보드 내리는 방법, 키보드 이벤트, inputAccessoryView, endEditing, tableView)

jake-kim 2021. 9. 6. 21:46

keyboard 바로 위에 버튼 표출

UITextField, UITextView에서 keyboard 위 버튼 표출

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

textField에 내장되어 있는 inputAccessoryView 프로퍼티 

  • 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

Comments