2014-11-14 4 views
4

저는 신속하고 (프로그래밍에 익숙하지 않습니다.) 지금은 라벨에 시계를 표시하고 싶은 프로젝트를 만들고 있습니다.UILabel에서 시계를 표시하는 날짜와 시간을 얻는 방법

class CurrentDateAndTime { 

let currentTime = NSDateFormatter.localizedStringFromDate(NSDate(), dateStyle: .MediumStyle, timeStyle: .MediumStyle) 
} 

다음 내보기 컨트롤러에서이 코드를 레이블로 전화 :

@IBOutlet weak var currentTimeLabel: UILabel! 

let currentTime = CurrentDateAndTime() 



override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 

    currentTimeLabel.text = currentTime.currentTime 
} 

문제는이 업데이트되지 않습니다이다

지금 내 모델이 있습니다 실제 시간을 보여주기위한 두 번째 간격. 그리고 결국 "시작 시간"과 "정지 시간"사이에 시간을 기록 할 수 있도록 두 개의 시간 스탬프를 구별해야합니다. 이것도 최선/가장 간단한 방법인가요? 내 목표를 향한 어떤 단서도 크게 감사 할 것입니다. 원하는 간격으로 콜백을 예약 할 수

답변

6

사용 NSTimer-self 초마다

  • tick()에이 경우,

    • 전화 tick() 현재 시간 문자열을 가져 와서 UILabel

      class MyViewController { 
          @IBOutlet weak var currentTimeLabel: UILabel! 
      
          var timer = NSTimer() 
      
          override func viewDidLoad() { 
           super.viewDidLoad() 
      
           // Do any additional setup after loading the view, typically from a nib. 
      
           timer = NSTimer.scheduledTimerWithTimeInterval(1.0 
                        target: self, 
                        selector: #selector(tick),  
                        userInfo: nil, 
                        repeats: true) 
          } 
      
          @objc func tick() { 
           currentTimeLabel.text = NSDateFormatter.localizedStringFromDate(NSDate(), 
                           dateStyle: .MediumStyle, 
                           timeStyle: .MediumStyle) 
          } 
      } 
      
      를 업데이트

    스위프트 4.0 업데이트 :

    class MyViewController : UIViewController { 
        @IBOutlet weak var currentTimeLabel: UILabel! 
    
        var timer = Timer() 
    
        override func viewDidLoad() { 
         super.viewDidLoad() 
         timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector:#selector(self.tick) , userInfo: nil, repeats: true) 
        } 
    
        @objc func tick() { 
         currentTimeLabel.text = DateFormatter.localizedString(from: Date(), 
                       dateStyle: .medium, 
                       timeStyle: .medium) 
        } 
    } 
    
  • +0

    내가 잘못 뭘하는지 잘 모르겠습니다 만, 여전히 라벨에 업데이트되지 않는다 1.0 초 간격. 앱을 실행할 때 간격으로 업데이트되는 라벨을 볼 수 없습니까? – Leighton

    +0

    죄송합니다. 'CurrentDateAndTime' 클래스가'현재 '날짜/시간을 상수로 한 번만 계산한다는 것을 놓쳤습니다. 모든 'tick'에 대해 내 대답을 업데이트했습니다. 필요에 따라 리팩터링을해야합니다. –

    +0

    굉장! 그게 다 잘됐다. 감사 – Leighton

    6

    이것은 더 많은 전류 (2016) 스위프트 예입니다

    import Cocoa 
    
    class ViewController: NSViewController { 
        @IBOutlet weak var labelClock: NSTextField! 
        let dateFormatter = DateFormatter() 
    
        override func viewDidLoad() { 
         super.viewDidLoad() 
         // Do any additional setup after loading the view. 
         dateFormatter.dateStyle = .medium 
         dateFormatter.timeStyle = .long 
         Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(updateLabel), userInfo: nil, repeats:true); 
        } 
    
        override var representedObject: Any? { 
         didSet { 
          // Update the view, if already loaded. 
         } 
        } 
    
    
        func updateLabel() -> Void { 
         labelClock.stringValue = dateFormatter.string(from: Date()); 
        } 
    } 
    
    관련 문제