以编程方式将键盘从大写切换为小写

5
我想将用户的键盘从大写字母变成小写字母,强制输入小写字母。我该怎么做?

2
你可以获取包含键盘的UIWindow,并使用一些非常非常不合法的quartz API在大致范围内模拟按下开启大写锁定的键。或者,只需让iOS的文本控件处理它,通过适当设置其capitalizationType来实现。随你选择。 - CodaFi
@CodaFi 问题在于,当我调用 textView shouldChangeTextInRange 并使用我的自定义方法来更新 textView,然后 return NO; 代码永远不会被调用以关闭大写键(例如将句子的第一个字母大写)。因此,我需要执行我的自定义方法,覆盖 iOS 添加用户输入文本的操作,然后仍然返回所有其他方法。 - Albert Renshaw
可能是UiTextField中第一个字母小写的重复问题。你把事情搞得太复杂了,这样做从来都不好。 - CodaFi
4个回答

6

不要试图强制键盘转换为小写,只需在用户输入后将字符强制转换为小写即可。

您没有说明您是使用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:方法。

3

textField.autocapitalizationType = UITextAutocapitalizationTypeNone;

的意思是关闭文本框自动大写功能。

2

您可以在关闭键盘后将文本框中的字符串转换为小写。例如,

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

这会在关闭键盘时将文本转换为小写字母,达到您想要的效果。

这很不错,但是我现在更改他们的文本的方式会导致大写锁定在他们按下每个键后打开...然而用户可能希望某些字母大写,但目前无论他们是否打开或关闭它,在按下每个键后都会被强制打开。 - Albert Renshaw

0

textField.autocapitalizationType = .none

针对 Swift


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接