이 포스트는 textViewDidChange(_:)에서 문자열 또는 속성 문자열 (NSAttributedString)을 설정하면 textView의 Curser position이 초기화 되는 현상을 수정하기 위한 포스팅입니다 :)
속성 문자열에 대한 포스팅은 여기서 확인하실 수 있습니다.
최종 수정일 - 22. 08. 22 PM 3:57
문제 확인
1. textViewDidChange(_:) 함수에 text 또는 attributedText를 설정한다.
func textViewDidChange(_ textView: UITextView) {
guard var text = textView.text else { return }
textView.text = text
}
2. 테스트
3. 한글자 입력 후 가장 마지막으로 위치가 변경된다.
해결 방법
1. text 또는 attributedText를 설정하기 전에 위치값 저장하고 변경되면 다시 불러온다.
// STEP 1: 위치값 저장
guard let selectedTextRange = textView.selectedTextRange else { return }
// STEP 2: 코드 실행 후 위치값 변경
textView.text = text
// STEP 3: 저장한 위치값 불러오기
if let selectedTextRange = textView.position(from: selectedTextRange.start, offset: 0) {
textView.selectedTextRange = textView.textRange(from: selectedTextRange, to: selectedTextRange)
}
2. 테스트
3. 정상적으로 입력된다.
'iOS > Swift' 카테고리의 다른 글
[Swift] 배너 만들기(Make a Slide banner with Carousel) (1) | 2022.09.19 |
---|---|
[Swift] UILabel 생략 부호(... 또는 Ellipsis) 바꾸기 (0) | 2022.09.01 |
[Swift] 화면 눌러서 키보드 내리기 (Tap to hide keyboard) (0) | 2022.08.12 |
[Swift] 속성 문자열 사용법 (NSAttributedString) (0) | 2022.08.12 |
[Swift] 원형 프로그래스 바 구현 (Custom circular progress bar) (0) | 2022.08.12 |