Программно переключить клавиатуру с верхнего на нижний регистр

Я хотел бы перевести клавиатуру моего пользователя с верхнего регистра на нижний регистр, чтобы заставить печатать строчными буквами. Как я могу это сделать?


person Albert Renshaw    schedule 11.03.2013    source источник
comment
Вы можете получить UIWindow, содержащий клавиатуру, и использовать несколько очень незаконных API-интерфейсов кварца для имитации касания в непосредственной близости от клавиши заглавных букв. Или просто позвольте текстовым элементам управления iOS справиться с этим, установив его capitalizationType соответствующим образом. Выбирай.   -  person CodaFi    schedule 12.03.2013
comment
@CodaFi проблема в том, что когда я вызываю textView shouldChangeTextInRange и использую свои пользовательские методы для обновления textView, а затем return NO;, код никогда не вызывается для отключения клавиши прописных букв после нажатия первой клавиши (например, использование заглавной буквы в первой букве предложения). Поэтому мне нужно сделать свой пользовательский метод, переопределить iOS, добавив текст, который набрал пользователь, а затем вернуть все остальные методы.   -  person Albert Renshaw    schedule 12.03.2013
comment
возможный дубликат первой буквы в нижнем регистре UiTextField. Ты слишком все усложняешь, а это нехорошо.   -  person CodaFi    schedule 12.03.2013


Ответы (4)


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

Вы не сказали, используете ли вы UITextField или UITextView. Предположим, вы используете файл UITextField.

Объявите свой контроллер представления, чтобы принять протокол UITextFieldDelegate, и установите делегата текстового поля на контроллер представления.

В контроллере представления реализуем этот метод:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    string = [string lowercaseString];
    textField.text = [textField.text stringByReplacingCharactersInRange:range
        withString:string];
    return NO;
}

Если вы используете UITextView, примите протокол UITextViewDelegate и реализуйте метод textView:shouldChangeTextInRange:replacementText:.

person rob mayoff    schedule 11.03.2013

textField.autocapitalizationType = UITextAutocapitalizationTypeNone;

person Say2Manuj    schedule 20.04.2015

Что вы можете сделать, так это сделать строчную строку текстового поля после закрытия клавиатуры. Например,

[sender resignFirstResponder];
textField.text = textField.text.lowercaseString;

Это делает текст строчными, когда они закрывают клавиатуру, что делает то, что вы хотите.

person Chris Loonam    schedule 11.03.2013
comment
Это будет хорошо, за исключением того, что то, как я меняю их текст прямо сейчас, заставляет блокировку заглавных букв включаться после каждого нажатия клавиши... однако пользователь может захотеть, чтобы какая-то буква была заглавной, но на данный момент независимо от того, включают они ее или нет. или выключено, оно будет принудительно включаться после нажатия каждой клавиши. - person Albert Renshaw; 12.03.2013

textField.autocapitalizationType = .none

для быстрого

person Quiet Islet    schedule 04.10.2017