2015-10-04 4 views
16

Я хотел бы установить максимальное количество символов, которые могут быть введены как в UITextView, так и в UITextField. Этот номер будет затем показано в небольшом лейблеУстановка максимального количества символов `UITextView` и` UITextField`

+0

Вы проверяете текущую длину текста, а не то, что длина собирается стать. – rmaddy

+0

http://stackoverflow.com/a/1773257/4475605 – Adrian

+0

пошел по ссылке Я добавил этот код в ViewDidLoad и заменил 'UITextField' на' myMessageObjectLabel', правильно? Теперь я получил эту ошибку. Использование необъявленного типа «myMessageObjectLabel». Я сейчас использую swift 1.2, может быть проблема? – biggreentree

ответ

43

Попробуйте это:

func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool { 
    let newText = (textView.text as NSString).stringByReplacingCharactersInRange(range, withString: text) 
    let numberOfChars = newText.characters.count // for Swift use count(newText) 
    return numberOfChars < 10; 
} 
+0

Это правильно, но почему переменная с именем 'numberOfLines', когда это число символов? – rmaddy

+0

да это правильно, я забыл про количество строк –

+0

@WilliamKinaan Сколько строк? В вопросе ограничения количества строк нет ничего. – rmaddy

8

Попробуйте это: (для справки пользователя, Twitter Style.) -

func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool { 
    print("chars \(textView.text.characters.count) \(text)") 

    if(textView.text.characters.count > 20 && range.length == 0) { 
     print("Please summarize in 20 characters or less") 
     return false; 
    } 

    return true; 
} 
25

СВИФТ 3,01

func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool { 
    let newText = (textView.text as NSString).replacingCharacters(in: range, with: text) 
    let numberOfChars = newText.characters.count 
    return numberOfChars < 10 
} 
6

Swift 3.0

Просто переопределить эту функцию UITextFieldDelegate установите нужную переменную characterLimit, и вы хорошо идти:

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool 
{   
     let characterLimit = 5 
     let newText = NSString(string: textField.text!).replacingCharacters(in: range, with: string) 
     let numberOfChars = newText.characters.count 
     return numberOfChars < characterLimit 
} 
+1

это текстовое поле, а не текст. – Fattie

4

Swift 4:

func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool { 
    let newText = (textView.text as NSString).replacingCharacters(in: range, with: text) 
    return newText.count <= 70 
} 
0

Swift 4, Xcode 9.1 GM

func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool { 
    adjustFrames() 
    return textView.text.count + (text.count - range.length) <= 200 
} 
1

Swift 4/Xcode 9,1

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

    let currentText = textView.text ?? "" 
    guard let stringRange = Range(range, in: currentText) else { return false } 
    let changedText = currentText.replacingCharacters(in: stringRange, with: text) 
    return changedText.count <= 399 // Pass your character count here 
} 
Смежные вопросы