#ios #swift
Вопрос:
Как я могу изменить цвет только дополнительных букв при вводе в поле UITextField в Swift и вернуть цвет обратно при удалении? Я смог изменить цвет всех букв только при превышении лимита
class ViewController: UIViewController, UITextFieldDelegate { @IBOutlet weak var inputLimitField: UITextField! @IBOutlet weak var characterCountLabel: UILabel! override func viewDidLoad() { super.viewDidLoad() characterCountLabel.text = "10/10" inputLimitField.delegate = self } func checkRemainingChars() { let allowedChars = 10 let charsInTextView = -(inputLimitField.text?.count ?? 0) let remainingChars = allowedChars charsInTextView characterCountLabel.textColor = .black inputLimitField.textColor = .black inputLimitField.layer.borderColor = UIColor.systemGray3.cgColor if remainingChars lt; 0 { characterCountLabel.textColor = .red inputLimitField.textColor = .red inputLimitField.layer.borderColor = UIColor.red.cgColor inputLimitField.layer.cornerRadius = 6.0 inputLimitField.layer.borderWidth = 1.0 } characterCountLabel.text = ("(String(remainingChars))/10") } func textFieldDidChangeSelection(_ textField: UITextField) { checkRemainingChars() } }
это то, что я ожидал получить , введите описание изображения здесь
и это то, что я действительно получаю, введите описание изображения здесь
p.s. также я не могу поставить счетчик букв в углу через границу TF, потому что при импорте компонентов материалов возникает ошибка: No such module 'MaterialComponents'
Комментарии:
1. Вам нужно использовать
NSAttributedString
для раскрашивания только некоторые буквы. Затем используйтеyourTextField.attributedText
для его установки/извлечения. СString
/yourTextField.text
это невозможно, потому что это просто список букв, нет никаких эффектов «рендеринга», таких как цвета, хотяNSAttributedString
это дает такую возможность. Обратите внимание, что затем он может также добавлять другие эффекты для символов: шрифт (затем жирный/курсив/размер), подчеркивание и т.д.2. У вас уже была та же тема около 8 часов назад. Подсказка:
NSMutableAttributedString
.3. Подсказка 2: если let text = inputLimitField.text { let allowedText = text.prefix(allowedChars) }
4. Подсказка 3: пусть notAllowedText = текст.суффикс(text.count — разрешенные символы)