Как включить четкое действие кнопки в UITextField (swift)?

Я новичок в Swift, и у меня есть проблема, которую я не знаю, как решить. Итак, у меня есть UITextField, где у меня есть ограничение максимум в 5 символов в текстовом поле, и у меня нет проблем с остановкой на пятом символе, но проблема в том, что я не могу очистить текст, потому что кнопка очистки, вероятно, считается персонаж в iOS.

Кто-нибудь может помочь мне решить эту проблему?

Вот мой код:

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

    if let count = textField.text?.characters.count {
        if count < 5 {
            print("\(count)")
            return true
        }
        else {
            return false
        }
    }
    return true
}

Спасибо.


person Fedor Tsyganov    schedule 27.09.2015    source источник
comment
Что вы имеете в виду под ... но проблема в том, что я не могу очистить текст, потому что кнопка очистки, вероятно, считается символом в iOS? Какой персонаж?   -  person Duncan C    schedule 27.09.2015
comment
когда у меня есть 5 символов в текстовом поле и я хочу удалить (стереть) символ, я нажимаю ‹X | кнопка, которая должна удалить последний символ, но ничего не происходит   -  person Fedor Tsyganov    schedule 28.09.2015


Ответы (2)


Вам нужно проверить, какой будет длина текстового поля, а не какой она сейчас. Попробуй это:

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

    let oldText: NSString = textField.text!
    let newText: NSString = oldText.stringByReplacingCharactersInRange(range, withString: string)

    let count = newText.length 
    if count <= 5 {
         print("\(count)")
         return true
    } else {
         return false
    }
}

Примечание: я плохо говорю на Swift. В этом коде может быть одна или две синтаксических ошибки.

person rmaddy    schedule 27.09.2015
comment
ваше решение сработало для меня с некоторыми изменениями, спасибо - person Fedor Tsyganov; 28.09.2015
comment
вернуть newText.length ‹= 5 - person Leo Dabus; 28.09.2015

Вы хотите показать кнопку «X», чтобы очистить текст, верно? Тогда используйте это:

textField.clearButtonMode = .WhileEditing
person Soberman    schedule 27.09.2015
comment
Вопрос не в этом. - person rmaddy; 28.09.2015
comment
Кнопка находится на клавиатуре. Изображение клавиатуры: bit.ly/1VhwFjL Я не хочу удалять все слово, только последний символ . Спасибо за ответ. - person Fedor Tsyganov; 28.09.2015