2

I am creating a UITextView for use as a rudimentary IDE. When the user pastes text (code) I am modifying it so that it fits inline (correctly indented) with the other text. However, I am also coloring the text (attributedText) using the textViewDidChange method. As a result when I paste text, it is first inserted then adjusted inline. The process looks a bit weird especially for a large chunck of text. I was wondering if there is a way for me to catch that the text is being pasted in textViewDidChange to avoid running attribute changes until the text is modified. Note that coloring attributes in the of the textView shouldChangeTextIn method is not possible as I am implementing some custom behavior through the interaction of the two methods and adding attributes needs to be done at the textViewDidChange stage.

EXAMPLE SETUP

func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
    if (text == UIPasteboard.general.string) {
        // MODIFY PASTABLE TEXT HERE

        // INSERT MODIFIED TEXT
        textView.replace(textRange, withText: newText)

        // PREVENT OLD TEXT FROM BEING INSERTED
        return false
    }
}

func textViewDidChange(_ textView: UITextView) {
    // MANAGE ATTRIBUTES
}

WEIRD BEHAVIOR

enter image description here

Anters Bear
  • 1,816
  • 1
  • 15
  • 41

0 Answers0