如何强制文本字段仅在Swift中为大写?

时间:2014-11-25 15:05:56

标签: swift

我希望文本字段上的文本条目仅为大写。

有没有办法限制文本字段只输出大写字母,甚至限制软件键盘只显示大写字母给用户?

7 个答案:

答案 0 :(得分:9)

let textFieldOutput = "Wait a moment, please."
let newString = textFieldOutput.uppercased()
//The string is now "WAIT A MOMENT, PLEASE."

答案 1 :(得分:3)

步骤1。在Main.Storyboard中,选择文本字段,然后单击属性检查器enter image description here

步骤2。然后在文本输入特征中->在大写字母中选择“所有字符”。enter image description here

答案 2 :(得分:1)

您可以使用

将文本更改为大写
string.uppercaseStringWithLocale(NSLocale.currentLocale())

您可以使用textField:shouldChangeCharactersInRange:replacementString:方法更改文字。

答案 3 :(得分:1)

您可以使用以下内容将字符串更改为大写:

var newString = myString.uppercaseString

答案 4 :(得分:1)

至少有两个选择:

  1. 使用Swift的uppercaseString类的String属性生成文本的全大写版本。如果您想要在文本字段中键入任何内容的大写版本,这是一个合理的选项。

  2. 在文本字段的委托中实施方法textField(_:shouldChangeCharactersInRange:replacementString:)。您的实现应使用替换字符串的大写版本进行替换,然后返回false。如果文本在文本字段中显示为大写,则这是您想要的方法。

答案 5 :(得分:0)

在swift 3中:

var newString = myString.uppercased()

答案 6 :(得分:0)

将键盘输入类型更改为All Characters不会阻止用户切换回小写字母(至少在iOS 13上如此)。 我使用以下代码(Swift 5.1)仅大写添加到文本字段的新字符,而不是像其他一些答案中所建议的那样一遍又一遍地设置完整的字符串。

    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        let firstLowercaseCharRange = string.rangeOfCharacter(from: NSCharacterSet.lowercaseLetters)
        if let _ = firstLowercaseCharRange {
            if let text = textField.text, text.isEmpty {
                textField.text = string.uppercased()
            }
            else {
                let beginning = textField.beginningOfDocument
                if let start = textField.position(from: beginning, offset: range.location),
                    let end = textField.position(from: start, offset: range.length),
                    let replaceRange = textField.textRange(from: start, to: end) {
                    textField.replace(replaceRange, withText: string.uppercased())
                }
            }
            return false
        }
        return true
    }