#ios #uitextfield #capitalization
#iOS #uitextfield #капитализация
Вопрос:
Я создал новый проект, в котором есть только одно текстовое поле, и я установил заглавные буквы для всех символов. Я пробовал это как из конструктора интерфейса, так и из кода:
[self.textField setAutocapitalizationType:UITextAutocapitalizationTypeAllCharacters];
Независимо от того, что я пытаюсь, это результат:
Я знаю, что настройки автоматической капитализации клавиатуры можно изменить в настройках — Общие — Клавиатура — Автокапитализация, но я предполагаю, что не было бы смысла иметь свойство AutocapitalizationType в текстовом поле, если оно все равно перезаписано iOS.
Это также не работает для UITextAutocapitalizationTypeWords.
Это происходит в iOS 10.0.2 на iPhone 6S (в других ответах говорится, что это происходит в симуляторе, но это не так).
Есть идеи, в чем проблема?
Ответ №1:
Я знаю, что настройки автоматической капитализации клавиатуры можно изменить в Settings — General — Keyboard — Auto-Capitalization, но я предполагаю, что не было бы смысла иметь свойство AutocapitalizationType в текстовом поле, если оно все равно перезаписано iOS.
Вы правы, этот переключатель в настройках должен быть включен. Но это не переопределяет значение текстовых полей в приложении. Если этот переключатель включен, всем текстовым полям, которые хотят капитализировать ввод пользователя, будет разрешено это делать, а текстовые поля со UITextAutocapitalizationTypeNone
значением ничего не будут капитализировать.
Комментарии:
1. Действительно, установка переключателя в положение on приведет к тому, что каждое текстовое поле в каждом приложении будет соответствовать его капитализации. Установка переключателя в положение выкл. всегда будет отображать клавиатуру заглавными буквами, независимо от того, какая заглавная буква установлена в приложении.
2. @WonderDog Вот что я имел в виду.
autocapitalizationType
работает скорее как рекомендация для системы, но если пользователь хочет, он может полностью отключить это.
Ответ №2:
Одним из способов принудительного представления всех заглавных букв в текстовом поле независимо от директивы autocapitalization было вставить этот небольшой поворот в функцию UITextFieldDelegate:
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
let str = string.capitalized
let result = (textField.text as NSString?)?.replacingCharacters(in: range, with: str) ?? str
textField.text = result
return false
}
Вставленные символы также будут заглавными, как и ожидалось.