2017-01-08 13 views
1

約3時間私はそれを行うにはUIDatePickerを取得しようとしました。私はUITextFieldのアクションとして、UIDatePickerで新しいビューコントローラにセグメントするようにセットアップしました。これはすべて動作しています。私は日付を選択し、それを元のView Controllerに送り返すことができました。5分間隔のUIDatePickerは、間隔が表示されている間に表示されます

問題は、5分の時間間隔を使用していることです。日付ピッカー「車輪」を移動せず、親のコントローラに戻るために「完了」ボタンを選択しないと、非インターバル時間が返されます。だから11:37は私が11:40が必要なときに11:37を返す。しかし、「車輪」を変更すると、丸められた時刻が返されます。 datepickerは、現時点で5分間隔を表示しています。私を正しい解決に導く手掛かりはありますか?私はsetDateminuteIntervalをviewDidAppearのUIDatePickerで試してみました。

protocol DatePickerDelegate { 
    func datePickerDidSelect(selectedDate: String) 
} 

class DatePickerVC: UIViewController { 

@IBOutlet weak var pickerView: UIDatePicker! 

var selectedDate = "" 
var delegate : DatePickerDelegate? 


override func viewDidLoad() { 
    super.viewDidLoad() 
} 

override func viewDidAppear(_ animated: Bool) { 
    //setDate() 
    //Have tried using setDate and minuteInterval here 
} 

func formatDate() -> DateFormatter { 
    let dateFormatter = DateFormatter() 
    dateFormatter.dateFormat = "MMM d, yyyy h:mm a" 
    return dateFormatter 
} 

func setDate() { 
    let dateFormatter = formatDate() 
    selectedDate = dateFormatter.string(from: pickerView.date) 
    self.delegate?.datePickerDidSelect(selectedDate: selectedDate) 
    print(selectedDate) 
} 

@IBAction func datePickerChanged(_ sender: Any) { 
    setDate() 
} 

@IBAction func doneBtnPressed(_ sender: Any) { 
    self.dismiss(animated: true, completion: nil) 
} 

@IBAction func cancelBtnPressed(_ sender: Any) { 
    self.dismiss(animated: true, completion: nil) 
} 
} 

答えて

2

をあなたはこのようなニーズに日付とそのラウンドをチェックすることができ:

override func viewDidLoad() { 
    super.viewDidLoad() 

    let calendar = Calendar.current 
    var dateComponents = calendar.dateComponents([.month, .day, .year, .hour, .minute], from: datePicker.date) 
    guard var hour = dateComponents.hour, var minute = dateComponents.minute else { 
     print("something went wrong") 
     return 
    } 

    let intervalRemainder = minute % datePicker.minuteInterval 
    if intervalRemainder > 0 { 
     // need to correct the date 
     minute += datePicker.minuteInterval - intervalRemainder 
     if minute >= 60 { 
      hour += 1 
      minute -= 60 
     } 

     // update datecomponents 
     dateComponents.hour = hour 
     dateComponents.minute = minute 

     // get the corrected date 
     guard let roundedDate = calendar.date(from: dateComponents) else { 
      print("something went wrong") 
      return 
     } 

     // update the datepicker 
     datePicker.date = roundedDate 
    } 
} 

は何かが不明である場合はお気軽に下記の私が使用しているコードがあります!

+0

私はこれを動作させましたが、 'datePicker.date = roundedDate'を' datePicker.setDate(roundedDate、animated:false) 'に変更しなければなりませんでした。しかし、その間に、実際には、このアプリケーションでは、現在の開始時間を選択していない可能性が高いので、時間が選択/変更されるまで終了ボタンを無効にすることを決定しました。 – user1881482

関連する問題