2016-07-25 92 views
1

我正在开发一个应用程序,用户应该能够选择一个时间段。即上午8:00至上午8:30或下午2:00至下午2:30。但我希望用户只根据当前时间选择时隙。即如果他的晚上8点,他不应该选择直到晚上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

如果您需要获取当前时间,[this](http://stackoverflow.com/questions/38576463/how-do-i-find-out-whether-time-has -passed-swift)文章可以帮助 – Lahav

回答

1

首先要创建一个名为日历或任何你喜欢的,并添加以下代码迅速文件:

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 
    } 
} 

之后,你可以在你的ViewController在viewDidLoad中(写)类似的东西获取时间我在故事板上添加了一个标签,以便我可以看到当前的小时。

let currentDate = NSDate() 
    timeLabel.text = currentDate.hour().description 

上面的代码是从该柱:https://stackoverflow.com/a/29319223/6598643

以上我用夫特3.在其他后其夫特

--- --- EDIT

这里是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

感谢您的回复。所以你说的是,我应该根据当前时间生成一个数组而不是硬编码,然后检查时间是否已经过去?我理解正确吗?我想要一个30分钟的时间间隔,比如8:00 AM - 8:30 AM。我如何得到任何想法?我想从上午8点开始到晚上9点30分。 –

+0

@PruthviHariharan有几种方法可以做到这一点。当我读到你的问题时,这是我的第一个想法。如果你想聊天,我们可以讨论这个问题,因为它很多......我的声誉很低,我无法创建聊天,但是如果你想要的话,你可以创建聊天。 –

相关问题