【问题标题】:Datepicker and GestureControl Question - SwiftDatepicker 和 GestureControl 问题 - Swift
【发布时间】:2021-08-05 21:59:02
【问题描述】:

我目前有一个日期选择器。从本质上讲,我想做的是,如果您向左滑动日期将返回一天,即(1 月 2 日至 1 月 1 日)或向右滑动将日期向前滑动一天,即(1 月 2 日至 1 月 3 日)。我已经成功地实现了一种使用当前日期执行此操作的方法,但问题是它停在那里,因为它需要当前日期数据。基本上,这不会让我在几天内连续来回走动,因为它需要当前日期。我想让它无休止地来回1天。我怎样才能改进我的代码?提前谢谢你。

视图控制器:

 @IBOutlet weak var userDate: UITextField!
    private var datePicker: UIDatePicker?

    override func viewDidLoad() {
        super.viewDidLoad()

        datePicker = UIDatePicker()
        datePicker?.datePickerMode = .date
        datePicker?.addTarget(self, action: #selector(Test.dateChanged(datePicker:)), for: .valueChanged)

        userDate.inputView = datePicker
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "EEEE, MMM d, yyyy"
        let todayDate = dateFormatter.string(from: Date.init())
        self.userDate.text = todayDate
        
        let swipeLeft = UISwipeGestureRecognizer(target: self, action: #selector(self.handleGesture(gesture:)))
            swipeLeft.direction = .left
            self.view.addGestureRecognizer(swipeLeft)

        let swipeRight = UISwipeGestureRecognizer(target: self, action: #selector(self.handleGesture(gesture:)))
            swipeRight.direction = .right
            self.view.addGestureRecognizer(swipeRight)

    }
    
    @objc func handleGesture(gesture: UISwipeGestureRecognizer) -> Void {
        
        if gesture.direction == UISwipeGestureRecognizer.Direction.right {
               print("Swipe Right")
              view.backgroundColor = .black
               Calendar.current.date(byAdding: .day, value: -1, to: datePicker.date)! // WHAT NEEDS TO BE CHANGED IN ORDER FOR IT TO CONTINUOSLY ALLOW GOING BACK THE DATES
        }
        else if gesture.direction == UISwipeGestureRecognizer.Direction.left {
               print("Swipe Left")
                view.backgroundColor = .yellow
               Calendar.current.date(byAdding: .day, value: 1, to: datePicker.date)! // WHAT NEEDS TO BE CHANGED IN ORDER FOR IT TO CONTINUOSLY ALLOW GOING FORWARD THE DATES
           }
    }

【问题讨论】:

    标签: swift datepicker nsdate


    【解决方案1】:

    您的代码的问题在于,当您在 userDate.text 字段中输入一个值时,您会传递该时刻的日期和时间,而您永远不会更新它。您的代码需要更改如下。

    private var daysDifference = 0 // The days difference from the now date. Negative numbers go for previous dates and positives for future dates.
    
    override func viewDidLoad() {
        // As is
    }
    
    @objc func handleGesture(gesture: UISwipeGestureRecognizer) -> Void {
        
        if gesture.direction == UISwipeGestureRecognizer.Direction.right {
               print("Swipe Right")
              view.backgroundColor = .black
              self.daysDifference = self.daysDifference - 1 // Update daysDifference for one day before
        } else if gesture.direction == UISwipeGestureRecognizer.Direction.left {
               print("Swipe Left")
               view.backgroundColor = .yellow
               self.daysDifference = self.daysDifference + 1 // Update daysDifference for one day after
        }
        self.userDate.text = Calendar.current.date(byAdding: .day, value: self.daysDifference, to: datePicker.date)!
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-25
      • 2011-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-09
      相关资源
      最近更新 更多