Skip to content

TextView Delegate #7

@happykwon

Description

@happykwon

UITextViewDelegate 프로토콜은 UITextView의 행동을 관리하기 위해 사용된다.
사용자가 텍스트 뷰에서 작업을 할 때 다양한 상황에 대응하여 메서드를 호출하고 정의 할 수 있는 프로토콜이다.

대표적인 메서드

텍스트 변경 감지

textView(_:shouldChangeTextIn:replacementText:) 텍스트 뷰의 특정 범위에 텍스트를 변경하려 할 때 호출되며.

이 메서드는 변경을 허용할지 여부를 결정할 수 있다

//숫자만 입력할 수 있게 제한 
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
    let allowedCharacters = CharacterSet.decimalDigits
    let characterSet = CharacterSet(charactersIn: text)
    return allowedCharacters.isSuperset(of: characterSet)
}

편집 시작 및 종료

textViewDidBeginEditing(_:) 텍스트 뷰가 편집 모드에 들어갔을 때 호출

// 편집 시 배경색을 회색으로 변경
func textViewDidBeginEditing(_ textView: UITextView) {
    textView.backgroundColor = UIColor.lightGray 
}

textViewDidEndEditing(_:) 텍스트 뷰가 편집 모드에서 나왔을 때 호출

// 편집 종료 후 배경색을 하얗게 변경
func textViewDidEndEditing(_ textView: UITextView) {
    textView.backgroundColor = UIColor.white 
}

텍스트 변경 시

textViewDidChange(_:) 텍스트 뷰의 텍스트가 변경될 때마다 호출, 사용자의 입력에 따라 동적으로 반응

// 최대 100자로 제한
func textViewDidChange(_ textView: UITextView) {
    if textView.text.count > 100 { 
        textView.text = String(textView.text.prefix(100))
    }
}

textViewDidChangeSelection(_:) 텍스트 뷰에서 선택된 텍스트 범위가 변경될 때 호출, 선택된 택스트에 따라 특정 동작을 수행 할 수 있게도 가능

func textViewDidChangeSelection(_ textView: UITextView) {
    print("현재 선택된 범위: \(textView.selectedRange)")
}
func textViewDidChangeSelection(_ textView: UITextView) {
    // 사용자가 텍스트를 선택
    if textView.selectedRange.length > 0 { 
        let startIndex = textView.text.index(textView.text.startIndex, offsetBy: textView.selectedRange.location)
        let endIndex = textView.text.index(startIndex, offsetBy: textView.selectedRange.length)
        let selectedText = String(textView.text[startIndex..<endIndex])

        // 선택된 텍스트를 이용한 작업 수행, 예를 들어 번역, 분석 등
        translateText(selectedText)
    }
}

func translateText(_ text: String) {
    // 번역 로직 구현
    print("번역할 텍스트: \(text)")
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions