Как ограничить количество строк, которые пользователь использует return? - PullRequest
0 голосов
/ 08 октября 2019

В этом проекте пользователи имеют возможность написать биографию с пределом в 150 символов. Можно ли также ограничить количество строк, которые может иметь пользователь? Например, когда я нажимаю клавишу возврата на клавиатуре, она создает новую строку. И я могу делать это столько раз, сколько захочу, могу ли я это изменить?

По аналогии с тем, как Instagram ограничивает продолжительность био (по высоте), сохраняя при этом ограничение персонажа.

Вот код для ограничения символов

  // Give textView character limit of 150
    func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {



        if(textView.text.count > 150 && range.length == 0) {
            print("Opps hit 150")
            navigationItem.rightBarButtonItem?.isEnabled = false

            return false
        }

        navigationItem.rightBarButtonItem?.isEnabled = true

        return true
    }

Обновление

На основе полученного ответа вот обновленный код


 var lineCounter = 0


 extension EditProfileController: UITextViewDelegate {

    // Give textView character limit of 150
    func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {

        // Prevent the user from creating to many new lines.


            if(text == "\n") {
                lineCounter += 1
                if lineCounter == 20 {
            }
            print("Stop sending user to next line")
                return false
            }



        if(textView.text.count > 150 && range.length == 0) {
            print("Opps hit 150")
            navigationItem.rightBarButtonItem?.isEnabled = false

            return false
        }

        navigationItem.rightBarButtonItem?.isEnabled = true

        return true
    }

}

Итак, хорошая новость в том, что когда я нажимаю кнопку возврата, это не создает новую строку. Однако можно ли разрешить кнопке возврата создавать 4 новые строки перед повторным запуском false?

Ответы [ 2 ]

1 голос
/ 08 октября 2019

Альтернативно, вы можете взять переменную класса, такую ​​как LineCounter, и внутри вашего метода делегата вы должны использовать приведенный ниже код. Это сведет к минимуму необходимость вашего требования.

// Переменная члена

var lineCounter = 0

Например, если вы хотите, пользователь может нажать кнопку «Возврат» максимум 5 раз, но он может ввести 150 символов.

    func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {

        if(text == "\n") {
            lineCounter += 1
            if lineCounter >= 5 {

            return false
        }
        }

        if(textView.text.count > 150 && range.length == 0) {
            print("Opps hit 150")
            navigationItem.rightBarButtonItem?.isEnabled = false
            textView.resignFirstResponder()
            return false
        }

        navigationItem.rightBarButtonItem?.isEnabled = true

        return true
    } 
0 голосов
/ 13 ноября 2019

Вы можете вычислить высоту textView на основе размера их шрифта и проверить в UITextViewDelegate, была ли достигнута эта высота

func textViewShouldEndEditing(_ textView: UITextView) -> Bool { 
    // check here
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...