2017-11-17 2 views
1

キーボードタイプが数字パッドのUITextFieldです。 、>00:12
1、2を入力する - 2は、1を入力する>00:01
- 例については00:00UITextFieldに入力されたものを00:01のようなカウンター番号に変換します。


1を入力:私は、彼らはのような時間のようにフォーマットされているように、数字を入力できるようにしたいです3 - >01:23
1を入力、2、3、4 - >12:34

12:3412 minutes and 32 seconds

を象徴210

また、最大4桁に達すると、それ以上入力すると何も処理されません。

01:23などの入力したものをInt秒(秒)に変換したい場合もあります。この場合は83 - 可能な場合。

+0

何を試しましたか?いくつかのコードを表示してください... –

+0

私はこれを試しましたが、多くのエラーと正確には私が欲しいものではありません:https://stackoverflow.com/a/34239761/7842955 – Loctor

+0

そのちょうど論理。秒としての最小有意性と時間としての最上位桁を読み取ります。それを文字列として保持し、num秒に変換するメソッドを作成します。 – 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

NumberFormatterメソッド' string()の代わりにFormatterのメソッド 'string(for:Any) from:NSNumber) 'を呼び出し、任意の数値型を渡します。すなわち: 'formatter.string(for:Double(number)/ 100)' –

関連する問題