Изменить определенный цвет слов в UITextView - PullRequest
0 голосов
/ 24 апреля 2018

Что я пробую

код

 func textViewDidChange(_ textView: UITextView) {
    var output = " " + textView.text
    var outArray = output.components(separatedBy: " ").dropFirst()

    for W in outArray {
        if W == "//" {
            textView.textColor = UIColor.lightGray
        }
    }
}

Задача

Проблема, с которой я столкнулся, заключается в том, что я пытаюсь изменить цвет только определенных слов (например, "//" будет красным, а "let" будет зеленым) в UITextView, поэтому мне было интересно, как вы могли бы сделай это.

Ответы [ 2 ]

0 голосов
/ 25 апреля 2018

Вы можете сделать это легко, сделав расширение для UITextView

extension UITextView {
    func halfTextColorChange (fullText : String , changeText : String ) {

        let strNumber: NSString = fullText as NSString
        let range = (strNumber).range(of: changeText)
        let attribute = NSMutableAttributedString.init(string: fullText)
        attribute.addAttribute(NSAttributedStringKey.foregroundColor, value: UIColor(red: 76/255, green: 76/255, blue:76/255, alpha: 1.0) , range: range)

        self.attributedText = attribute
    }
}

Использование

txtView.halfTextColorChange(fullText: "ABCXYZ", changeText: "XYZ")
0 голосов
/ 24 апреля 2018

Попробуйте этот код

import UIKit

extension String {
    func getRanges(of string: String) -> [NSRange] {
        var ranges:[NSRange] = []
        if contains(string) {
            let words = self.components(separatedBy: " ")
            var position:Int = 0
            for word in words {
                if word.lowercased() == string.lowercased() {
                    let startIndex = position
                    let endIndex = word.count
                    let range = NSMakeRange(startIndex, endIndex)
                    ranges.append(range)
                }
                position += (word.count + 1) 
            }
        }
        return ranges
    }
    func setColorToChar(_ chars: [String] , color: [UIColor]) -> NSMutableAttributedString {
        let attributedString = NSMutableAttributedString(string: self)

        if chars.count != color.count {
            fatalError("Colors are not added correctly")
        }

         //   let ranges = getRanges(of: char)
           for i in 0..<chars.count {
            let ranges = getRanges(of: chars[i])
            for range in ranges {
                attributedString.addAttributes([NSForegroundColorAttributeName: color[i]], range: range)
            }
        }

        return attributedString
    }
}

class ViewController: UIViewController,UITextViewDelegate {

   @IBOutlet weak var myTextView: UITextView!

    override func viewDidLoad() {
        super.viewDidLoad()
        myTextView.delegate = self 

    }

    func textViewDidChange(_ textView: UITextView) {

        textView.attributedText = textView.text.setColorToChar(["//","let"], color: [.red,.green])
    }


}

Результат скриншот

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...