2016-07-25 1 views
1

사용자가 시간 슬롯을 선택할 수 있어야하는 앱을 개발 중입니다. 오전 8시 30 분 또는 오후 2시 - 오후 2시 30 분입니다. 그러나 사용자가 현재 시간을 기준으로 시간대 만 선택하도록합니다. 즉 8PM 인 경우 오후 9 시까 지 슬롯을 선택할 수 없습니다. 나는 최소한 시간 간격이 필요하다. 지금은 아래 그림과 같이 시간 슬롯을 하드 코딩하여 피커보기로 표시했습니다.시간이 지났는지 어떻게 알 수 있습니까? Swift

var items = ["8.00 AM - 8.30 AM","8.30 AM - 9.00 AM","9.00 AM - 9.30 AM","9.30 AM - 10.00 AM","10.00 AM - 10.30 AM","10.30 AM - 11.00 AM","11.00 AM - 11.30 AM","11.30 AM - 12.00 PM","12.00 PM - 12.30 PM","12.30 PM - 1.00 PM","1.00 PM - 1.30 PM","1.30 PM - 2.00 PM","2.00 PM - 2.30 PM","2.30 PM- 3.00 PM","3.00 PM - 3.30 PM","3.30 PM - 4.00 PM","4.00 PM - 4.30 PM","4.30 PM - 5.00 PM","5.00 PM - 5.30 PM","5.30 PM - 6.00 PM","6.00 PM - 6.30 PM","6.30 PM - 7.00 PM","7.00 PM - 7.30 PM","7.30 PM - 8.00 PM","8.00 PM - 8.30 PM","8.30 PM - 9.00 PM"] 


func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 

    if pickerView.tag == 1 { 
     return dates[row] as? String 
    }else{ 
     return items[row] 
    } 

} 

func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 
    if pickerView.tag == 1 { 
     dateTextField.text = dates[row] as? String 
    }else if pickerView.tag == 2{ 


     timeTextField.text = items[row] 
    } 

사용자가 시간을 선택하고 지나간 시간이 지나면 경고를 표시하거나 과거의 시간 슬롯을 비활성화해야합니다. 아무도 이것을 달성하기 위해 나를 도울 수 없었다.

당신이 좋아하고 다음 코드를 추가 어떤 일정 또는 명명 신속한 파일을 만들려면 모든
+0

현재 시간을 얻기 위해 필요한 경우, [이] (http://stackoverflow.com/questions/38576463/how-do-i-find-out-whether-time-has 가진 행운을 빕니다 -passed-swift) – Lahav

답변

1

첫째 : 그런 당신이있는 viewDidLoad에서의 ViewController (에 쓸 수 후

import UIKit 

extension NSDate { 
    func hour() -> Int 
    { 
     //Get Hour 
     let calendar = Calendar.current 
     let components = calendar.components(.hour, from: self as Date) 
     let hour = components.hour 

     //Return Hour 
     return hour! 
    } 

    func minute() -> Int 
    { 
     //Get Minute 
     let calendar = Calendar.current 
     let components = calendar.components(.minute, from: self as Date) 
     let minute = components.minute 

     //Return Minute 
     return minute! 
    } 

    func toShortTimeString() -> String 
    { 
     //Get Short Time String 
     let formatter = DateFormatter() 
     formatter.timeStyle = .short 
     let timeString = formatter.string(from: self as Date) 

     //Return Short Time String 
     return timeString 
    } 
} 

을) 뭔가 시간을 얻으려면 내 스토리 보드에 레이블을 추가하여 현재 시간을 볼 수 있습니다. :

위의 코드는이 게시물에서입니다
let currentDate = NSDate() 
    timeLabel.text = currentDate.hour().description 

: https://stackoverflow.com/a/29319223/6598643

내가 다른 게시물의 스위프트

--- 편집에 스위프트 3. 사용 위 ---

다음은 pickerView 코드입니다.

import UIKit 

class ViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate { 

    @IBOutlet weak var timeLabel: UILabel! 
    @IBOutlet weak var pickerView: UIPickerView! 
    var array = [String]() 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     let currentDate = NSDate() 
     self.pickerView.dataSource = self; 
     self.pickerView.delegate = self; 
     var nextHour = 0 
     var nextMinute = 0 
     var forLoop = 0 
     timeLabel.text = "\(currentDate.hour().description) : \(currentDate.minute())" 
     if currentDate.minute() > 30 { 
      nextHour = currentDate.hour()+2 
      nextMinute = 30 
     }else{ 
      nextHour = currentDate.hour()+1 
      nextMinute = 0 
     } 
     if nextMinute == 0 { 
      forLoop = (21 - nextHour-1) 
      for index in 0 ... forLoop{ 
       array.append("\(nextHour+index):00") 
       array.append("\(nextHour+index):30") 
      } 
      array.append("21:00") 
     }else{ 
      forLoop = (21 - nextHour - 1) 

      for index in 0 ... forLoop{ 
       array.append("\(nextHour+index):00") 
       array.append("\(nextHour+index):30") 
      } 
      array.append("21:00") 
     } 
    } 

    func numberOfComponents(in pickerView: UIPickerView) -> Int { 
     return 1 
    } 

    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 
     return array.count 
    } 

    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 
     return array[row] 
    } 
} 

현재 시간에서 21:00까지 남은 시간을 배열에 계산하여로드하고 pickerView에로드합니다.

희망이 있습니다. 프로젝트 :

+0

답장을 보내 주셔서 감사합니다. 그래서 당신은 하드 코딩 대신 현재 시간을 기준으로 배열을 생성 한 다음 시간이 과거인지 여부를 확인해야한다고 말하고 있습니까? 내가 제대로 이해 했는가? 그리고 오전 8시 - 오전 8시 30 분처럼 30 분 간격 슬롯을 원합니다. 어떻게 생각하세요? 오전 8 시부 터 시작하여 오후 9시 30 분까지 타임 슬롯이 필요합니다. –

+0

@PruthviHariharan 이것을 수행하는 방법에는 여러 가지가 있습니다. 그것은 당신의 문제를 읽을 때 처음 생각했습니다. 우리는 채팅을 원할 경우이 문제를 논의 할 수 있습니다 .... 나는 낮은 평판을 가지고 있고 채팅을 할 수는 없지만 u를 원할 수는 있습니다. –