【问题标题】:iOS TextField AutoCapitalization not workingiOS TextField AutoCapitalization 不起作用
【发布时间】:2016-10-19 16:59:45
【问题描述】:

我创建了一个只有一个文本字段的新项目,并将大写设置为所有字符。我从界面构建器和代码中都试过了:

[self.textField setAutocapitalizationType:UITextAutocapitalizationTypeAllCharacters];

不管我怎么尝试,结果都是这样:

我知道键盘自动大写设置可以从 Settings - General - Keyboard - Auto-Capitalization 更改,但我认为拥有 AutocapitalizationType 文本字段上的属性,如果它被 iOS 覆盖的话。

它也不适用于 UITextAutocapitalizationTypeWords。

这发生在 iPhone 6S 上的 iOS 10.0.2 上(其他答案说它发生在模拟器中,但事实并非如此)。

知道是什么问题吗?

【问题讨论】:

    标签: ios uitextfield capitalization


    【解决方案1】:

    我知道键盘自动大写设置可以 从设置 - 常规 - 键盘 - 自动大写更改,但 我认为拥有 文本字段上的 AutocapitalizationType 属性(如果它被覆盖) 无论如何都是由 iOS 开发的。

    你是对的,设置中的这个开关应该是打开的。但它不会覆盖应用中文本字段的值。如果此切换打开,所有想要大写用户输入的文本字段都将被允许这样做,而具有UITextAutocapitalizationTypeNone 值的文本字段将不会大写任何内容。

    【讨论】:

    • 确实,将开关设置为打开将使每个应用程序中的每个文本字段都遵循其大小写。将开关设置为关闭将始终以小写字母显示键盘,无论应用中设置的大小写如何。
    • @WonderDog 这就是我的意思。 autocapitalizationType 更像是对系统的推荐,但如果用户愿意,他可以完全关闭它。
    【解决方案2】:

    不管自动大写指令如何,我在 textField 中强制使用全大写表示的一种方法是在 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
    }
    

    这也将大写插入的字符,正如预期的那样。

    【讨论】:

      猜你喜欢
      • 2020-11-22
      • 2018-02-25
      • 2020-05-11
      • 2022-01-08
      • 2021-01-07
      • 1970-01-01
      • 2012-09-26
      • 1970-01-01
      • 2019-02-25
      相关资源
      最近更新 更多