티스토리 뷰
728x90
반응형
UITextField 에서 입력받을 글자 수를 제한해보자.
- 먼저 UITextField 의 텍스트가 변경될 때 옵저버에게 알릴 수 있도록 notification center 를 등록했다.
NotificationCenter.default.addObserver(self,
selector: #selector(textFieldDidChange(_:)),
name: UITextField.textDidChangeNotification,
object: nil)
UITextField.textDidChangeNotification
UITextField 의 텍스트가 변경될 때 observers 에게 알리는 notification
- textFieldDidChange(_:)
cardTitleTextField 의 텍스트가 변경될 때 maxLength(상수로 15를 지정해둔 상황) 보다 클 경우 더이상 입력되지 않도록 제한.
@objc
private func textFieldDidChange(_ notification: Notification) {
if let textField = notification.object as? UITextField {
switch textField {
case cardTitleTextField:
if cardTitleTextField.text?.count ?? 0 > maxLength {
cardTitleTextField.deleteBackward()
}
default:
return
}
}
}
그런데! 15자보다 긴 텍스트를 복사해서 붙여넣게 되면 아예 입력이 되지 않았다.
그래서 15자까지만 입력되도록 코드를 변경해보았다.
@objc
private func textFieldDidChange(_ notification: Notification) {
if let textField = notification.object as? UITextField {
switch textField {
case cardTitleTextField:
if let text = cardTitleTextField.text {
if text.count > maxLength {
// 🪓 주어진 인덱스에서 특정 거리만큼 떨어진 인덱스 반환
let maxIndex = text.index(text.startIndex, offsetBy: maxLength)
// 🪓 문자열 자르기
let newString = text.substring(to: maxIndex)
cardTitleTextField.text = newString
}
}
default:
return
}
}
}
substring(to:) 이 deprecated 됐으니까 partial range upto 연산자를 사용하라고 한다...
PartialRangeUpTo
A partial half-open interval up to, but not including, an upper bound.
라고 개발자 문서는 설명했는데요... 그니까.. 우리가 아주 잘 알고있는 ..<
입니다!
half-open range operator. 반개방 범위 연산자라고 불러지는데요. 범위에서 상위의 값을 포함하지 않는 범위를 의미합니다!
그러면 적용해볼까요?
let newString = text.substring(to: index)
// ->
let newString = String(text[text.startIndex..<maxIndex])
728x90
반응형
'iOS' 카테고리의 다른 글
iOS) 무한스크롤 구현하기 (2) | 2022.01.01 |
---|---|
iOS) iOS 15 + UIButton.ConfigurationUpdateHandler 으로 버튼 상태 핸들링하기 (0) | 2021.12.15 |
iOS) UIPickerView 에 고정 라벨 추가하기 (0) | 2021.12.01 |
iOS) 탭바 테두리, 그림자 설정 및 iOS 15.0 대응 (0) | 2021.11.28 |
Swift) 삼항연산자 (4) | 2021.11.24 |
댓글
TAG
- WWDC22
- Widget
- Notification
- watchOS
- rxswift
- 2022 KAKAO TECH INTERNSHIP
- APNS
- Protocol
- Objective-C
- YPImagePicker
- WWDC
- IOS
- Firebase
- RxCocoa
- github
- 서버통신
- UserDefaults
- MVVM
- WidgetKit
- Algorithm
- OpenSourceLibrary
- urlsession
- projectsetting
- CloneCoding
- async/await
- SwiftUI
- Swift
- configurable widget
- MOYA
- containerBackground
최근에 올라온 글
최근에 달린 댓글
글 보관함
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
링크
- Total
- Today
- Yesterday