gpt4 book ai didi

ios - uidatepicker 总是滚动到当前时间

转载 作者:行者123 更新时间:2023-11-29 05:20:12 25 4
gpt4 key购买 nike

enter image description here enter image description here

按下按钮后,日期选择器始终滚动到当前时间,并且日期选择器时间也不会显示。

我正在设置一个日期选择器。我正在尝试将日期选择器和按钮连接到标签以显示正确的时间。我已将“PickUp ASAP”按钮连接到“@IBAction func buttonPressed”,如前面的代码所示,效果很好,即按下时在“标签”中显示当前日期和时间(这里是 2019 11 06 04:20:PM )(参见上面的图片和下面的代码)。所以,这里一切都很好。

现在,我还尝试连接“@IBAction func datePickerChanged”以在滚动时在“标签”中显示当前日期和时间(参见上面的图片和下面的代码)。

  1. 我的主要问题是,一旦我按下“尽快取件”按钮,无论我做什么,日期选择器总是滚动回当前日期和时间。即使我将日期选择器滚动到不同的日期,它也总是滚动回当前日期和时间。

  2. 另一个问题是,如果我滚动日期选择器而不单击“尽快拾取”按钮,“标签”不会显示日期选择器的任何日期和时间。我希望“标签”在滚动时显示日期选择器的日期和时间。

此外,当我按下“尽快取件”按钮或滚动日期选择器时,“标签”中的显示格式应该相同。

我在上面分别附上了模拟器和 Storyboard所需的屏幕截图。

     import UIKit

@IBDesignable class testdateViewController: UIViewController {

@IBOutlet weak var Label: UILabel!

@IBOutlet weak var picker: UIDatePicker!

@IBAction func buttonPressed(_ sender: UIButton) {

picker.addTarget(self, action: #selector(buttonPressed), for: .valueChanged)
let currentDateTime = Date()

let formatter = DateFormatter()

formatter.dateFormat = "yyyy MM dd hh:mm: a"

Label.text = " \( (formatter.string(from: currentDateTime)))"

picker.date = currentDateTime
}

override func viewDidLoad() {
super.viewDidLoad()

let datepicker = UIDatePicker()

datepicker.addTarget(self, action: #selector(testdateViewController.datePickerChanged), for: UIControl.Event.valueChanged)
}

@IBAction func datePickerChanged(_ sender: Any) {

let datePicker = UIDatePicker()
let dateFormatter = DateFormatter()
let strDate = dateFormatter.string(from: datePicker.date)
Label.text = strDate
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}

最佳答案

代码更新:

ViewDidLoad() 中删除此代码

let datepicker = UIDatePicker()
datepicker.addTarget(self, action: #selector(testdateViewController.datePickerChanged), for: UIControl.Event.valueChanged)

并在ViewDidLoad()中使用它

 picker.addTarget(self, action: #selector(testdateViewController.datePickerChanged), for: UIControl.Event.valueChanged)

将一些代码从 buttonPressed 方法移至 datePickerChanged

datePickerChanged 看起来像

@IBAction func datePickerChanged(_ sender: Any) {
updateData(date: picker.date)
}

如果您想在标签中显示当前日期,那么您可以管理另一种方法来将值设置为标签,如下所示

func updateData(date: Date) {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy MM dd hh:mm: a"
let strDate = dateFormatter.string(from: picker.date)
Label.text = strDate
}

并在 ViewDidLoad() 方法中添加此

 updateData(date: Date()) // This will show the current date value

最终的ViewDidLoad()看起来像

override func viewDidLoad() {
super.viewDidLoad()
picker.date = Date() // You can set any date initially that you want. This will be a date object
picker.addTarget(self, action: #selector(testdateViewController.datePickerChanged), for: UIControl.Event.valueChanged)
updateData(date: Date())
}

并删除 buttonPressed 中的所有代码。因为在初始加载期间,它将在标签上显示当前时间。

完整的代码如下

import UIKit

class testdateViewController: UIViewController {

@IBOutlet weak var Label: UILabel!
@IBOutlet weak var picker: UIDatePicker!
@IBAction func buttonPressed(_ sender: UIButton) {

}

override func viewDidLoad() {
super.viewDidLoad()
picker.date = Date() // You can set any date initially that you want. This will be a date object
picker.addTarget(self, action: #selector(testdateViewController.datePickerChanged), for: UIControl.Event.valueChanged)
updateData(date: Date())

}

@IBAction func datePickerChanged(_ sender: Any) {
updateData(date: picker.date)
}

func updateData(date: Date) {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy MM dd hh:mm: a"
let strDate = dateFormatter.string(from: picker.date)
Label.text = strDate
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}

关于ios - uidatepicker 总是滚动到当前时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58741343/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com