2016-07-25 17 views
1

Ich entwickle eine app, wo Benutzer sollten in der Lage einen Zeitschlitz zu wählen. d. h. von 08:00 bis 08:30 Uhr oder von 14:00 bis 14:30 Uhr. Aber ich möchte, dass der Benutzer nur den Zeitschlitz basierend auf der aktuellen Zeit auswählt. wenn es 8PM ist, sollte er nicht in der Lage sein, Slots bis 9 PM zu wählen. Ich brauche mindestens eine Stunde Abstand. Denn jetzt habe ich nur schwer die Zeitschlitze codiert, wie unten gezeigt und in einer Picker-Ansicht angezeigt werden.Wie finde ich heraus, ob die Zeit vergangen ist? 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] 
    } 

Wenn der Benutzer die Zeit auswählt und wenn es vorbei ist, möchte ich eine Warnung präsentieren oder sollte ich die Zeitschlitze, die Vergangenheit deaktivieren. Könnte mir bitte jemand helfen, dies zu erreichen.

+0

Wenn Sie die aktuelle Zeit bekommen müssen, [diese] (http://stackoverflow.com/questions/38576463/how-do-i-find-out-whether-time-has -passed-swift) Beitrag kann helfen – Lahav

Antwort

1

allererst Sie eine schnelle Datei Kalender oder was auch immer Sie mögen und fügen Sie den folgenden Code namens erstellen möchten:

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

Danach können Sie auf Ihrem Viewcontroller in viewDidLoad schreiben kann() so ähnlich erhalten die Zeit, die ich ein Label auf mein Storyboard hinzugefügt haben, so dass ich die aktuelle Stunde sehen.:

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

Der obige Code von diesem Posten ist: https://stackoverflow.com/a/29319223/6598643

Above i verwendet Swift 3. Auf der anderen Post seine Swift

--- EDIT ---

Hier ist der Code für den 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] 
    } 
} 

Es berechnet und Lasten auf einem Array der Zeiten von der aktuellen Zeit auf picker bis 21:00 Uhr und lädt sie nach links.

Ich hoffe, ich half. Viel Glück mit Ihrem Projekt :)

+0

Vielen Dank für Ihre Antwort. Sie sagen also, ich sollte ein Array basierend auf der aktuellen Zeit anstelle von hartem Code generieren und dann überprüfen, ob die Zeit vorbei ist? Habe ich richtig verstanden? Und ich möchte ein 30-Minuten-Intervall wie 8:00 Uhr morgens - 8:30 Uhr morgens. Wie bekomme ich diese Idee? Und ich möchte das Zeitfenster bis 9.30 Uhr ab 8 Uhr morgens haben. –

+0

@PruthviHariharan Es gibt mehrere Möglichkeiten, dies zu tun. Das war mein erster Gedanke, als ich dein Problem gelesen habe. Wir können dies diskutieren, wenn Sie in einem Chat wollen, denn es ist eine Menge .... Ich habe einen schlechten Ruf und ich kann keinen Chat erstellen, aber Sie können, wenn Sie wollen. –

Verwandte Themen