Я использую атрибутированную строку для форматирования единственной строки символов для UITextView
, которая будет обновляться всякий раз, когда нажимается кнопка или перемещается сборщик. Однако, поскольку я использую attributedStringLine.append(attributedCharString)
, attributedString
продолжает расти, а не запускать новую атрибутивную строку всякий раз, когда обновляется UITextView
.Как начать с пустой атрибутной строки при изменении UITextView?
Код ниже демонстрирует упрощенную версию проблемы.
NSMutableAttributedString()
действует на строку в myArray
. Новые строки обрабатываются при изменении UITextView
. Они находятся в array1,
array2
и array3
.
import UIKit
var str = "Hello, playground"
let array1 = ["7.0", "55.55", "1.0", "9.27"]
let array2 = ["0", "10", "20", "30", "40"]
let array3 = ["A", "B", "C", "D", "E", "F"]
var myArray = [""]
let attributedStringLine = NSMutableAttributedString()
let numberOfRawStringCharacters = myArray.count
func appendTextString(i: Int){
let rangeOfCharString = (myArray[i] as NSString).range(of: myArray[i])
let attributedCharString = NSMutableAttributedString.init(string: myArray[i], attributes: [NSFontAttributeName: UIFont.systemFont(ofSize: 18.0, weight: UIFontWeightLight)])
attributedCharString.addAttributes([NSForegroundColorAttributeName : UIColor.blue], range: rangeOfCharString)
attributedStringLine.append(attributedCharString)
}
func makeText() {
for i in 0..<myArray.count {
appendTextString(i: i)
}
}
var line = attributedStringLine.length
myArray.removeAll()
myArray = array1
myArray.count
makeText()
print(attributedStringLine)
line = attributedStringLine.length
myArray.removeAll()
myArray = array2
myArray.count
makeText()
attributedStringLine
line = attributedStringLine.length
myArray.removeAll()
myArray = array3
myArray.count
makeText()
attributedStringLine
line = attributedStringLine.length
Как начать с пустой attributedString всякий раз, когда UITextView
изменения?
Для NSMutableString
замена или удаление символов из диапазона существующей атрибутной строки, по-видимому, является единственной доступной альтернативой. И я уверен, что это не является дубликатом Value of type 'NSMutableAttributedString' has no member 'removeAll'
Ваше первое решение отлично работает в моем проекте Xcode, поэтому, с моей точки зрения, это будет принятый ответ. Стоит отметить, что строки, помеченные в Playground, выглядят правильно отформатированными для 'array2' и' array3', но для 'array1' отображается неформатированная строка, за которой следует приписанный скрипт форматирования, заключенный в фигурные скобки. На симуляторе эти числовые символы с плавающей запятой отображаются правильно. Благодарю. – Greg