Максимум 4 строки И всего 140 символов в UITextView - PullRequest
0 голосов
/ 19 сентября 2018

Я использую shouldChangeTextIn в UITextView, и я могу ограничить TextView максимум 4 строками ИЛИ максимум 140 символами, используя следующий код в shouldChangeTextIn :

Макс. 4 строки:

    let existingLines = textView.text.components(separatedBy: CharacterSet.newlines)
    let newLines = text.components(separatedBy: CharacterSet.newlines)
    let linesAfterChange = existingLines.count + newLines.count - 1

    return linesAfterChange <= textView.textContainer.maximumNumberOfLines

Макс. 140 символов:

    let newText = (textView.text as NSString).replacingCharacters(in: range, with: text)

    return newText.utf16.count < 140

Однако я хочу объединить эти два, чтобы он проверял оба, и я не смогчтобы понять это.Кто-нибудь может направить меня в правильном направлении?

С уважением, Эрик

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

Объедините логические значения с && (и оператором) и верните результат

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

        let existingLines = textView.text.components(separatedBy: CharacterSet.newlines)
        let newLines = text.components(separatedBy: CharacterSet.newlines)
        let linesAfterChange = existingLines.count + newLines.count - 1

        let newText = (textView.text as NSString).replacingCharacters(in: range, with: text)

        return linesAfterChange <= textView.textContainer.maximumNumberOfLines && newText.utf16.count < 140
    }
0 голосов
/ 19 сентября 2018

Вы должны хранить значения bool вместо того, чтобы возвращать их, объединять их с && и возвращать его.

let existingLines = textView.text.components(separatedBy: CharacterSet.newlines)
let newLines = text.components(separatedBy: CharacterSet.newlines)
let linesAfterChange = existingLines.count + newLines.count - 1
let linesCheck = linesAfterChange <= textView.textContainer.maximumNumberOfLines

let newText = (textView.text as NSString).replacingCharacters(in: range, with: text)
let characterCountCheck = newText.utf16.count < 140

return linesCheck && characterCountCheck

Sidenote: Избегайте использования NSString в Swift.Вы можете сделать то же самое с String.

func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
    if let textViewString = textView.text, let range = Range(range, in: textViewString) {
        let newString = textViewString.replacingCharacters(in: range, with: text)
    }
    return condition
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...