Одна из проблем, с которыми я столкнулся в некоторых из приведенных выше ответов, заключается в том, что если вы попытаетесь установить textfield.text
, вы потеряете позицию курсора. Поэтому, если пользователь пытается редактировать середину текста, курсор переместится в конец .
Вот мое простое решение Swift, все еще использующее UITextFieldDelegate
:
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
if textField == textFieldToUppercase {
if string == "" {
// User presses backspace
textField.deleteBackward()
} else {
// User presses a key or pastes
textField.insertText(string.uppercaseString)
}
// Do not let specified text range to be changed
return false
}
return true
}
Вам все равно придется обращаться, если пользователь нажимает на клавиатуре клавишу Return , Done и т. Д. Просто добавьте:
if string == "\n" {
// Do something when 'Done' is pressed, like dismiss the keyboard
textField.resignFirstResponder()
return false
}
... внутри func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool
.