【问题标题】:set alarm using DatePicker (swift3使用 DatePicker (swift3
【发布时间】:2017-07-14 21:25:29
【问题描述】:

如果您手动使用 datePicker 将日期和时间与用户的日期和时间相匹配,我的以下代码可以正常工作,它会打印得很酷。但是,该代码不能用作警报。我可以在用户时间之前设置日期选择器,当用户时间与日期选择器计时器匹配时,不会打印任何内容。我只是希望能够使用日期选择器选择日期/时间,并且当用户最终匹配 datePickers 时间时打印很酷。

import UIKit

 var dateFormatter : DateFormatter!

 let datePicker2 = UIDatePicker();
 let date = Date()

 class ViewController: UIViewController {

@IBOutlet var dateLabel: UILabel!
override func viewDidLoad() {
    super.viewDidLoad()

    let datePicker : UIDatePicker = UIDatePicker(frame: CGRect(x: 0,y: 330,width: self.view.frame.size.width,height: 220))
    datePicker.datePickerMode = UIDatePickerMode.dateAndTime
    self.view.addSubview(datePicker)

    datePicker.addTarget(self, action: #selector(ViewController.change(_:)), for: UIControlEvents.valueChanged)

    dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "YYYY-MM-dd hh:mm"
}

@IBAction func change(_ sender : UIDatePicker)
{
    let pickerString = dateFormatter.string(from: sender.date)
let nowString = dateFormatter.string(from: Date())

dateLabel.text = pickerString
if pickerString == nowString {
    print("cool")
}
}}

【问题讨论】:

  • 仅供参考 - 你没有像我在 my earlier answer 中提到的那样更新你的日期格式。

标签: if-statement time swift3 datepicker alarm


【解决方案1】:

发生这种情况是因为您的 if 语句仅在选择器移动时才被调用。您需要一个每秒触发一次的计时器,以查看它们是否匹配。要使用下面的方法,您只需将 pickerString 和 nowString 向上移动到全局变量。如果你不喜欢,你可以重构和使用你想要的。

var pickerString: String?
var nowString: String?

override func viewDidLoad() {
    super.viewDidLoad()
    let _ = Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { (timer) in
        if pickerString == nowString {
            print("cool")
        }
}

#buildSucceeded

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-19
    • 2017-04-07
    • 1970-01-01
    相关资源
    最近更新 更多