Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- SWIFT
- Xcode
- MVVM
- Clean Code
- RxCocoa
- clean architecture
- Observable
- rxswift
- 리펙토링
- tableView
- UITextView
- 클린 코드
- 애니메이션
- 리팩토링
- 리펙터링
- swift documentation
- map
- combine
- Protocol
- uitableview
- 스위프트
- ios
- swiftUI
- Human interface guide
- HIG
- collectionview
- ribs
- uiscrollview
- Refactoring
- UICollectionView
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] textField 키보드 위 버튼 (keyboard 위 버튼, 키보드 내리는 방법, 키보드 이벤트, inputAccessoryView, endEditing, tableView) 본문
iOS 응용 (swift)
[iOS - swift] textField 키보드 위 버튼 (keyboard 위 버튼, 키보드 내리는 방법, 키보드 이벤트, inputAccessoryView, endEditing, tableView)
jake-kim 2021. 9. 6. 21:46keyboard 바로 위에 버튼 표출
- 구현 방법
- 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
'iOS 응용 (swift)' 카테고리의 다른 글
[iOS - swift] TextView placeholder 적용 방법 (0) | 2021.09.08 |
---|---|
[iOS - swift] 화면 간 데이터 전달, 데이터 넘기기 (modal, pageSheet, navigation에서 delegate를 이용한 방법) (0) | 2021.09.07 |
[iOS - swift] Undo, 되돌리기 구현 방법 (UndoManager) (0) | 2021.09.04 |
[iOS - swift] ViewController에서 현재 보여지는 화면인지 확인하는 방법 (viewIfLoaded 사용) (0) | 2021.09.01 |
[iOS - swift] UIActivityIndicatorView, loadingView, 로딩 뷰 (0) | 2021.08.31 |
Comments