Тип автоматического ввода заглавных букв UITextField - приложение для iPhone


113

Есть ли способ установить autocapitalizationType для a UITextFieldтак, чтобы первая буква каждого слова была заглавной по умолчанию?

Это пример того, что я хочу


45
С другой стороны, приятно иметь возможность гуглить «UITextField capitalization» и получать это всплывающее окно через 2 секунды, вместо того, чтобы тратить целую минуту на открытие документации и сканирование на предмет этого. Документация StackOverflow IS.
Шаун Будрам

1
Наткнувшись на подобные вопросы, я рад, что 1) люди способны задавать последовательные прямые вопросы (независимо от объема) и 2) люди комментируют лучшее
Уилл фон Ульрих

Ответы:


238

Использовать textField.autocapitalizationType = UITextAutocapitalizationTypeWords;

Для получения дополнительной информации прочтите: Справочник по протоколу UITextInputTraits


2
Это не поможет, если вы вставляете текст в поле. В этом случае делегируйте ввод текста и заменяйте первую букву каждого слова
HotJard

Не могли бы вы подробнее рассказать о HotJard? Я хотел бы знать, как вставить текст и выполнить автокапитализацию.
vnchopra

5
Не работает, пробовал на Xcode 6 iOS 8 Swift. Я сделал это в построителе кода и интерфейса, ни то, ни другое не работает.
Van Du Tran

10
Убедитесь, что клавиатура в построителе интерфейса установлена ​​по умолчанию. Иначе не получится
OscarVGG

3
Также убедитесь, что у вас включена автокапитализация в настройках ОС (настройки-> общие-> клавиатура), значения настроек iOS переопределяют все, что вы установили в текстовом поле
Лопе

38

Что мы хотим сделать, так это установить текстовое поле autocapitalizationType.

Objective-C:

self.textfield.autocapitalizationType = UITextAutocapitalizationTypeWords

Swift:

self.textfield.autocapitalizationType = .words

Здесь есть несколько вариантов:

введите описание изображения здесь

  • allCharacters то же самое, что двойное нажатие клавиши Shift, в основном capslock.
  • none говорит само за себя, клавиатура никогда не пытается использовать заглавные буквы.
  • sentences будет пытаться использовать заглавные буквы в следующем слове после знака препинания.
  • words будет пытаться использовать каждое новое слово (после пробела) с заглавной буквы, что кажется именно тем, что вы ищете.

Это свойство также можно установить из инспектора атрибутов построителя интерфейса, когда у вас выбрано соответствующее текстовое поле:

введите описание изображения здесь

«Использование заглавных букв» - это первый вариант в этой группе, просто переданный выбор минимального размера шрифта для текстового поля.


8

Если задать для capitalizationсвойства значение «Слова», пользователю будет предложено ввести слова с заглавной буквы. Это может быть отменено пользователем, сняв переключение на клавиатуре. Лучше всего использовать слова в коде с заглавной буквы:

NSString *text = [myTextField.text capitalizedString];

Это будет заглавными буквами для всей строки, UITextAutocapitalizationTypeWords просто заглавной буквы в каждом введенном слове.
Джейкоб

Хотя OP не хотел этого, я действительно нашел это полезным! У меня где-то был сохранен NSString, все в верхнем регистре. Мне нужно было сравнить текст UITextField с исходной строкой, и использование вашей рекомендации избавило меня от необходимости объяснять вещи моему пользователю (я позволил Objective c сделать всю работу
:)

7

Да. В InterfaceBuilder в инспекторе атрибутов textField вы можете установить для свойства Capitalization значение Words.


6

Есть ответ для Obj-C, я здесь для Swift;

textField.autocapitalizationType = UITextAutocapitalizationType.words

или короче

textField.autocapitalizationType = .words

Я тестировал .words и .allCharacters. На Симуляторе все работает. На подключенном iPhone X этого не происходит. Xcode 10.1, iPhone 12.1.
geohei

1
Я не буду работать, если в настройках -> Общие -> Автокоррекция / Автозапись отключена.
Sheetal Shinde

1

Вы даже можете сделать это из файла Storyboard или .xib. Просто нужно выбрать текстовое поле, и в инспекторе атрибутов справа есть раздел «Заглавные буквы», где вы можете выбрать то, что вам подходит. В вашем случае это заглавная буква «Слова».


0

В Xamarin.ios / Monotouch это сработало для меня:

textField.AutocapitalizationType = UITextAutocapitalizationType.Words;
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.