2016-10-13 5 views
2

Я ищу, чтобы ограничить количество символов, которые пользователь может ввести в текстовое поле в 14. Вот код, на котором я нашел документацию.Максимальный лимит символов для TextField

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { 

    let currentCharacterCount = userNameTextField.text?.characters.count ?? 0 
    if (range.length + range.location > currentCharacterCount){ 
     return false 
    } 
    let newLength = currentCharacterCount + string.characters.count - range.length 
    return newLength <= 14 
} 

но я не чувствую, что реализую это правильно. Я поставил

userNameTextField.delegate = self 

в viewDidLoad, и я в соответствии с протоколом UITextFieldDelegate.

+1

ли она работает или нет? Какой у вас вопрос? Логика размещенного кода выглядит правильно. – rmaddy

+0

@rmaddy Я ищу колпачку, чтобы пользователь не вводил текст после 14 символов в текстовое поле. Когда я запускаю это, он этого не делает. – Kevin

+1

Что он делает? –

ответ

2

Вы утверждаете вы используете Swift 3. Подпись многих методов изменяемых Swift 3. Вы должны использовать:

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { 
} 

не отвечала старая подпись в вашем вопросе.

Если это еще не вызвано, вы никогда не устанавливаете свойство текстового поля delegate.

+0

Отлично! Именно то, что мне нужно, благодарю вас за то, что вы прошли через меня. – Kevin

0

Попробуйте вместо этого:

func textField(textField: UITextField!, shouldChangeCharactersInRange range: NSRange, replacementString string: String!) -> Bool { 
    let currentString: NSString = (textField.text ?? "") as NSString 
    let newString = currentString.replacingCharacters(in: range, with: string) 
    return newString.characters.count <= 14 
} 
+0

Почему? Код OP в порядке. Как это отвечает на вопрос? – rmaddy

+0

@rmaddy Я согласен, что код OP должен работать нормально, но он утверждает, что это не так, так почему бы не опубликовать код без ручных вычислений и проверок? Это просто похоже на менее подверженное ошибкам решение. – alexburtnik

+0

Мы даже не знаем, еще называется метод делегата. Ваш ответ действительно не «фиксирует» что-либо, потому что мы не знаем, какая именно проблема пока. – rmaddy

0

Попробуйте для быстрого 3:

let limit=4; 

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { 
    guard let text = txtSMSCode.text else { return true } 
    let newLength = text.characters.count + string.characters.count - range.length 
    return newLength <= limit 
} 
Смежные вопросы