У меня есть TableView, и в каждой ячейке есть UISwitch, который, если он включен, изменяет метку в строке.

Вот как я его модифицирую:

@IBAction func completedTask(_ sender: UISwitch) {
    
    //Getting original taskLabel
    let initalLabel = taskLabel.text
    
    //Modifying the string to have a line through it. Storing it in variable attributeString
    let attributeString: NSMutableAttributedString =  NSMutableAttributedString(string: taskLabel.text!)
    
        attributeString.addAttribute(NSAttributedString.Key.strikethroughStyle, value: 2, range: NSMakeRange(0, attributeString.length))
    
    
    if sender.isOn{
        print("attributed Label --> ",attributeString)
        taskLabel.textColor = UIColor.red
        taskLabel.attributedText = attributeString
    }else{
        print("initial Label --> ",initalLabel!)
        taskLabel.text = initalLabel
        taskLabel.textColor = UIColor.black
        
    }
}

У меня возникла проблема с возвратом метки к исходной строке. Я сделаю демо прямо сейчас. Я добавил несколько операторов печати, чтобы облегчить отладку. Мы видим, что initialLabel содержит правильное значение ячейки, но по какой-то причине не присваивает его.

Вот демо:

enter image description here


Почему мой taskLabel не отображается с правильной строкой?

0
navsharma 26 Ноя 2021 в 07:56

1 ответ

Лучший ответ

Нужно убрать зачеркивание в выключенном состоянии

Удаляет именованный атрибут из символов в указанном диапазоне. Ссылка removeAttribute: range:

 @IBAction func completedTask(_ sender: UISwitch) {
    
    //Modifying the string to have a line through it. Storing it in variable attributeString
    let attributeString: NSMutableAttributedString =  NSMutableAttributedString(string: taskLabel.text!)
    
    if sender.isOn{
       attributeString.addAttribute(NSAttributedString.Key.strikethroughStyle, value: 2, range: NSMakeRange(0, attributeString.length))
        
    }else{
        
attributeString.removeAttribute(NSAttributedStringKey.strikethroughStyle, value: 2, range: NSMakeRange(0, attributeString.length))
        }
    taskLabel.textColor =  sender.isOn ? .red :  .black
   taskLabel.attributedText = attributeString
}
1
Anbu.Karthik 26 Ноя 2021 в 08:11
Почему ты такой умный?
 – 
navsharma
26 Ноя 2021 в 09:29