2017-11-17 3 views
1

키보드 유형이 숫자 패드 인 UITextField이 있습니다. , 2, 1 타이핑>00:12
- 1 입력하면 2>00:01
- 00:00UITextField에 입력 된 내용을 00:01과 같은 카운터 번호로 변환하십시오.


를 들어 1을 입력하면 : 나는 그들이 같은 시간으로 서식이되도록 숫자를 입력 할 수 있도록하려면 3 ->01:23
3, 2, 1을 입력하면, (4) ->12:34

12:3412 minutes and 32 seconds

,691,363 상징210

또한 최대 4 자리 숫자를 입력하면 더 많은 내용을 입력 할 수 있습니다.

01:23과 같이 입력 한 내용을 초로 Int 초로 변환하고 싶습니다. 이 경우 83 - 가능한 경우.

+0

무엇을 시도 했습니까? 몇 가지 코드를 보여주십시오 ... –

+0

나는 많은 오류와 정확히 내가 원하는 것을 시도 : https://stackoverflow.com/a/34239761/7842955 – Loctor

+0

그냥 논리. 최소한 2 초로 중요하고 시간은 최우수 숫자로 읽습니다. 그것을 문자열로 유지하고 숫자를 초 단위로 변환하는 방법을 만듭니다. – 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)'그리고 당신의 경우'Double'에 숫자 타입을 전달합니다. 즉 :'formatter.string (for : Double (number)/100)' –

관련 문제