TextField swiftUI仅接受时间

ijxebb2r  于 2023-06-21  发布在  Swift
关注(0)|答案(1)|浏览(80)

我找不到太多的例子,下面的问题,所以在这里我再次请求您的帮助,在我的应用程序,我希望我的用户能够输入的文本字段只有时间,例如22:30,文本字段必须接受只有时间没有任何形式的字母或其他,而且我需要确保用户不插入超过4位数是有任何可能的解决方案,我怎么能做到这一点?

TextField("Test2", text: $test)
                       .textFieldStyle(.roundedBorder)
                       .keyboardType(.numberPad)

我不知道该找什么来解决这个问题,某种格式化程序,但我只能找到数字格式化程序,注意到与时间有关
谢谢

68bkxrlz

68bkxrlz1#

struct TimeTextField: View {
    @Binding var time: String

    var body: some View {
        TextField("Time", text: $time)
            .textFieldStyle(.roundedBorder)
            .textContentType(.none)
            .keyboardType(.numberPad)
            .onChange(of: time) { newValue in
                time = formatTimeInput(newValue)
            }
    }

    private func formatTimeInput(_ input: String) -> String {
        let allowedCharacterSet = CharacterSet(charactersIn: "0123456789")

        // Remove non-numeric characters
        let numericString = input.components(separatedBy: allowedCharacterSet.inverted).joined()

        // Limit the input to 4 digits
        let limitedString = String(numericString.prefix(4))

        // Insert colons at appropriate positions (e.g., 2230 -> 22:30)
        let formattedString: String
        if limitedString.count > 2 {
            let index = limitedString.index(limitedString.startIndex, offsetBy: 2)
            let hour = limitedString[..<index]
            let minute = limitedString[index...]
            formattedString = "\(hour):\(minute)"
        } else {
            formattedString = limitedString
        }

        return formattedString
    }
}

若要将TextField中的用户输入限制为特定格式(例如,仅允许最多4位数字的时间输入),可以利用TextField的textContentType属性并使用自定义格式化程序验证输入。

相关问题