iOS/Swift

[Swift] textViewDidChange(_:) 위치값 초기화 현상 수정

HUISOO 2022. 8. 22. 16:13

이 포스트는 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. 정상적으로 입력된다.