Используйте два UITextView с методом экземпляра "textView (_: shouldChangeTextIn: replaceText :)" - PullRequest
0 голосов
/ 20 февраля 2019

У меня есть два 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 'Я уверен, что это связано с аспектом делегирования, но не может пройти через него

Заранее спасибо за вашу помощь

...