2017-11-17 99 views
1

我有一個UITextField,其中鍵盤類型是一個數字鍵盤。我希望能夠鍵入數字因此它們被格式化爲一個時間,例如:00:00將輸入到UITextField的內容轉換爲類似於00:01的計數器號碼

對於實施例
打字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在這種情況下 - 如果可能的話。

+0

你嘗試了什麼?請顯示一些代碼... –

+0

我試過這個,但很多錯誤,並不完全是我想要的:https://stackoverflow.com/a/34239761/7842955 – Loctor

+0

它只是邏輯。閱讀最不重要的秒爲秒和最重要的數字爲小時。將其保留爲一個字符串並將其轉換爲秒數 – ahmed

回答

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 
+0

你可以使用Formatter的方法'string(for:Any)'而不是NumberFormatter方法'string來自:NSNumber)'並且傳遞任何數字類型,在你的情況下是'Double'。即:'formatter.string(for:Double(number)/ 100)' –