SwiftUI TextField 强制小写

Mat*_*sso 19 swiftui

我想将特定的 TextField 用于用户只能输入小写字符的 url 条目,但我找不到任何用于此目的的 TextField 修饰符。有什么解决办法吗?

Nic*_*sik 47

TextField 有一个.autocapitalization()方法。

您可以在没有自定义绑定的情况下使用:

TextField("URL", text: $url)
                    .keyboardType(.URL)
                    .autocapitalization(.none)
Run Code Online (Sandbox Code Playgroud)

这意味着用户输入的任何文本都将被 .lowercased()


Cla*_*nas 17

Xcode 13 和 14

SwiftUI - iOS 15.0 和 16.0

从:
.autocapitalization(.none)

到:
.textInputAutocapitalization(.never)

例子:

TextField("Enter URL", text: $url)
    .keyboardType(.URL)
    .textInputAutocapitalization(.never)
Run Code Online (Sandbox Code Playgroud)

  • 请注意,它是一个键盘修饰符,“.never”并不意味着从不。您可以将任何混合字母字符串粘贴到文本字段中,这意味着修饰符不会为您小写该字符串。 (2认同)

Vya*_*nov 8

您可以创建自定义绑定并通过它将状态 URL 变量设置为输入的小写版本:

struct ContentView: View {
    @State var url: String = ""

    var body: some View {
        let binding = Binding<String>(get: {
            self.url
        }, set: {
            self.url = $0.lowercased()
        })

        return VStack {
            TextField("Enter URL", text: binding)
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

  • 这效果很好。也可以写成: TextField("输入 URL", text: Binding(get: { self.url }, set: { string in self.url = string.lowercased() })) (2认同)

wor*_*dog 6

如果您想要的只是在用户按回车键后以小写字符串“结束”,您可以这样做:

@State var txt: String = ""

var body: some View {
        TextField("", text: $txt, onEditingChanged: { _ in
            self.txt = self.txt.lowercased()
        })
}
Run Code Online (Sandbox Code Playgroud)