Как установить режим countDownTimer в DatePicker на SwiftUI? - PullRequest
1 голос
/ 26 октября 2019

С UIKit, UIDatePicker позволяет установить режим UIDatePicker.Mode.countDownTimer, и мы можем установить длительность.

С SwiftUI я не вижу никакого собственного способа решить эту проблему. Единственным способом было бы создать интерфейс с UIKit?

This is how I need

[ОБНОВЛЕНИЕ]
Только найденное решение

DurationPickerView.swift

import SwiftUI
import UIKit

struct DurationPickerView: UIViewRepresentable {
    @Binding var time: Time

    func makeCoordinator() -> DurationPickerView.Coordinator {
        Coordinator(self)
    }

    func makeUIView(context: Context) -> UIDatePicker {
        let datePicker = UIDatePicker()
        datePicker.datePickerMode = .countDownTimer
        datePicker.addTarget(context.coordinator, action: #selector(Coordinator.onDateChanged), for: .valueChanged)
        return datePicker
    }

    func updateUIView(_ datePicker: UIDatePicker, context: Context) {
        let date = Calendar.current.date(bySettingHour: time.hour, minute: time.minute, second: time.second, of: datePicker.date)!
        datePicker.setDate(date, animated: true)
    }

    class Coordinator: NSObject {
        var durationPicker: DurationPickerView

        init(_ durationPicker: DurationPickerView) {
            self.durationPicker = durationPicker
        }

        @objc func onDateChanged(sender: UIDatePicker) {
            print(sender.date)
            let calendar = Calendar.current
            let date = sender.date
            durationPicker.time = Time(hour: calendar.component(.hour, from: date), minute: calendar.component(.minute, from: date), second: calendar.component(.second, from: date))
        }
    }
}

Time.swift

import Foundation

struct Time {
    var hour: Int
    var minute: Int
    var second: Int = 0
}
...