iOS 기본 (swift)
[iOS - swift] UITextField, UITextView 엔터 버튼, Done 버튼 처리 방법
jake-kim
2022. 1. 29. 03:11

* 코드로 UI 작성에 편리를 위해 사용한 프레임워크
- SnapKit
- Then
pod 'SnapKit'
pod 'Then'
Done 버튼 탭 시 동작 아이디어
- Done 버튼을 탭하게 되면, escape string 값 '\n' 입력으로 처리되는 형태이므로, textField(_:shouldChanceCharactersIn:replacementString:) 델리게이트에서 처리
- `\n`값을 받은 경우, 입력되는 처리를 한 후 false를 리턴하여, \n 입력을 막는 형태
UI 준비
- Done버튼이 눌렸을 때 UILabel에 값을 입력하는 형태
- UILabel - 텍스트 필드의 결과값 입력
- textField - 인풋
// ViewController.swift
import UIKit
import SnapKit
import Then
class ViewController: UIViewController {
private let label = UILabel().then {
$0.textColor = .systemBlue
$0.font = .systemFont(ofSize: 32)
$0.text = "result: "
}
private let textField = UITextField().then {
$0.returnKeyType = .done
$0.borderStyle = .roundedRect
$0.textColor = .black
$0.placeholder = "input..."
}
override func viewDidLoad() {
super.viewDidLoad()
self.view.addSubview(self.label)
self.view.addSubview(self.textField)
self.label.snp.makeConstraints {
$0.top.equalTo(self.view.safeAreaLayoutGuide).inset(36)
$0.centerX.equalToSuperview()
}
self.textField.snp.makeConstraints {
$0.top.equalTo(self.view.safeAreaLayoutGuide).inset(120)
$0.centerX.equalToSuperview()
}
}
}
- textField delegate 설정
- delegate 준수
self.textField.delegate = self - \n 문자열이 들어올 때 ( = Done버튼이 눌린 경우), 입력 처리 후 false를 리턴하여 textField에는 아무런 입력이 되지 않도록 처리
extension ViewController: UITextFieldDelegate { func textField( _ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String ) -> Bool { guard string != "\n" else { self.label.text = "result: " + (textField.text ?? "") return false } return true } }
- delegate 준수