Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将当前日期更改为一个之前/一个之后-Swift日期选择器_Swift_Nsdate_Uidatepicker_Uiswipegesturerecognizer - Fatal编程技术网

将当前日期更改为一个之前/一个之后-Swift日期选择器

将当前日期更改为一个之前/一个之后-Swift日期选择器,swift,nsdate,uidatepicker,uiswipegesturerecognizer,Swift,Nsdate,Uidatepicker,Uiswipegesturerecognizer,我有一个约会挑选员。我想将显示的日期更改为使用手势控制之前或之后的日期。也就是说,当一个人向左滑动时,日期会推迟一天;如果一个人向右滑动,日期会推迟一天。我不知道如何实现这一点,因为我已经尝试了下面的方法,但我得到一个错误,声明“无法将类型为“UITextField”的值转换为预期的参数类型“Date”。如果有人能帮我或者给我指出正确的方向,我会非常感激!谢谢 视图控制器: @IBOutlet weak var userDate: UITextField! private var

我有一个约会挑选员。我想将显示的日期更改为使用手势控制之前或之后的日期。也就是说,当一个人向左滑动时,日期会推迟一天;如果一个人向右滑动,日期会推迟一天。我不知道如何实现这一点,因为我已经尝试了下面的方法,但我得到一个错误,声明“无法将类型为“UITextField”的值转换为预期的参数类型“Date”。如果有人能帮我或者给我指出正确的方向,我会非常感激!谢谢

视图控制器:

    @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
                // WHERE I WOULD LIKE TO CHANGE THE DATE ONE DAY AFTER
        }
        else if gesture.direction == UISwipeGestureRecognizer.Direction.left {
               print("Swipe Left")
                view.backgroundColor = .yellow
                // WHERE I WOULD LIKE TO CHANGE THE DATE ONE DAY BEFORE
           }
    }
我尝试了此方法,但这就是我得到错误的原因:

Calendar.current.date(byAdding: .day, value: 1, to: userDate)!
函数
date(通过添加:value:to:options:)
要求将日期类型作为参数传递。您传递的是UITextField,而不是日期类型。 我想你想做的是

Calendar.current.date(byAdding: .day, value: 1, to: datePicker.date)!
函数
date(通过添加:value:to:options:)
要求将日期类型作为参数传递。您传递的是UITextField,而不是日期类型。 我想你想做的是

Calendar.current.date(byAdding: .day, value: 1, to: datePicker.date)!

您正在尝试设置一个textField,该方法在此处预期日期:

Calendar.current.date(byAdding: .day, value: 1, to: userDate)!
从您的问题来看,您似乎想从文本字段中显示的当前日期中增加或减少一天。请尝试以下代码来实现这一点。这将从userDate.text中获取日期,并根据滑动方向将userDate.text设置为新值,添加或减去一天

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var userDate: UITextField!
    private var datePicker: UIDatePicker?
    private let dateFormatter = DateFormatter()


    override func viewDidLoad() {
        super.viewDidLoad()

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

        userDate.inputView = datePicker
        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")
            // WHERE I WOULD LIKE TO CHANGE THE DATE ONE DAY AFTER
            let date = dateFormatter.date (from: userDate.text ?? dateFormatter.string(from: Date()))!
            let plusDay = Calendar.current.date(byAdding: .day, value: 1, to: date)!
            userDate.text = dateFormatter.string(from: plusDay)
        }
        else if gesture.direction == UISwipeGestureRecognizer.Direction.left {
            print("Swipe Left")
            // WHERE I WOULD LIKE TO CHANGE THE DATE ONE DAY BEFORE
            let date = dateFormatter.date (from: userDate.text ?? dateFormatter.string(from: Date()))!
            let minusDay = Calendar.current.date(byAdding: .day, value: -1, to: date)!
            userDate.text = dateFormatter.string(from: minusDay)
        }
    }
}

您正在尝试设置一个textField,该方法在此处预期日期:

Calendar.current.date(byAdding: .day, value: 1, to: userDate)!
从您的问题来看,您似乎想从文本字段中显示的当前日期中增加或减少一天。请尝试以下代码来实现这一点。这将从userDate.text中获取日期,并根据滑动方向将userDate.text设置为新值,添加或减去一天

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var userDate: UITextField!
    private var datePicker: UIDatePicker?
    private let dateFormatter = DateFormatter()


    override func viewDidLoad() {
        super.viewDidLoad()

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

        userDate.inputView = datePicker
        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")
            // WHERE I WOULD LIKE TO CHANGE THE DATE ONE DAY AFTER
            let date = dateFormatter.date (from: userDate.text ?? dateFormatter.string(from: Date()))!
            let plusDay = Calendar.current.date(byAdding: .day, value: 1, to: date)!
            userDate.text = dateFormatter.string(from: plusDay)
        }
        else if gesture.direction == UISwipeGestureRecognizer.Direction.left {
            print("Swipe Left")
            // WHERE I WOULD LIKE TO CHANGE THE DATE ONE DAY BEFORE
            let date = dateFormatter.date (from: userDate.text ?? dateFormatter.string(from: Date()))!
            let minusDay = Calendar.current.date(byAdding: .day, value: -1, to: date)!
            userDate.text = dateFormatter.string(from: minusDay)
        }
    }
}