将键入UITextField的内容转换为00:01等计数器编号

时间:2017-11-17 21:36:54

标签: ios swift uitextfield

我有一个UITextField,其中键盘类型是数字键盘。我希望能够输入数字,以便将它们格式化为时间,例如:00:00

例如
打字1 - > 00:01
键入1,2 - > 00:12
键入1,2,3 - > 01:23
键入1,2,3,4 - > 12:34

12:34代表12 minutes and 32 seconds

此外,一旦达到最多4位数,输入更多将无能为力。

我还希望将输入的内容(例如01:23)转换为Int秒 - 例如在这种情况下83 - 如果可能的话。

1 个答案:

答案 0 :(得分:0)

使用Int支持文本字段,并在用户按下某个键时修改Int。然后,您将格式化的Int显示为文本。这是一个示例游乐场:

import PlaygroundSupport

import UIKit

class ViewController: UIViewController {
    var textField =  UITextField(frame: CGRect(x: 0, y: 0, width: 100, height: 20))
    var number = 0
    override func viewDidLoad() {
        super.viewDidLoad()
        textField.backgroundColor = .white
        textField.keyboardType = .numberPad
        textField.delegate = self
        view.addSubview(textField)
    }
}

extension ViewController: UITextFieldDelegate {
    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        switch string {
        case "0","1","2","3","4","5","6","7","8","9":
            guard number < Int32.max / 100 else {
                return false
            }
            number *= 10
            number += Int(string)!
        case "":
            number /= 10
        default:
            break
        }

        let formatter = NumberFormatter()
        formatter.decimalSeparator = ":"
        formatter.minimumIntegerDigits = 1
        formatter.minimumFractionDigits = 2
        textField.text = formatter.string(from: NSNumber(value: Double(number) / 100.0))
        return false
    }
}

let v = ViewController()
PlaygroundPage.current.liveView = v.view