У меня есть два UITextView в ViewController, и я хочу ограничить количество символов, которые пользователь может редактировать в TextView.Я использую метод textView(_:shouldChangeTextIn:replacementText:)
Протокол UITextViewDelegate
объявлен
Оба UITextView имеют выход
@IBOutlet weak var UITextView1: UITextView!
@IBOutlet weak var UITextView2: UITextView!
иделегирование
override func viewDidLoad() {
super.viewDidLoad()
UITextView1.delegate = self
UITextView2.delegate = self
}
Я пробовал разные способы заставить его работать для обоих UITextView (дважды использовать функцию или оператор switch для настройки параметров)
На самом деле мой код ниже проходит тест сборки без ошибок.
// maximise number of characters typed in UITextViews
func textView( _ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
if let UITextViewA = UITextView1 {
let TextView1MaxLengh = 10
let TextView1Num = (UITextViewA.text as NSString).replacingCharacters(in: range, with: text)
let numberOfChars = TextView1Num.count
let NumberCharsString = "- \(String(TextView1MaxLengh - numberOfChars)) -"
return numberOfChars < TextView1MaxLengh
}
if let UITextViewB = UITextView2 {
let TextView2MaxLengh = 20
let TextView2Num = (UITextViewB.text as NSString).replacingCharacters(in: range, with: text)
let numberOfChars2 = TextView2Num.count
let NumberCharsString2 = "- \(String(TextView2MaxLengh - numberOfChars2)) -"
return numberOfChars2 < TextView2MaxLengh
}
return true
}
Когда я запускаю приложение и редактирую TextView1, оно отлично работает, но когда я пытаюсь отредактировать второе, приложение вылетает со следующим сообщением:
*** Terminating app due to uncaught exception 'NSRangeException', reason: '-[__NSCFString replaceCharactersInRange:withString:]: Range or index out of bounds'
I 'Я уверен, что это связано с аспектом делегирования, но не может пройти через него
Заранее спасибо за вашу помощь