繁体   English   中英

更改后如何从 UIDatePicker 获得结果?

[英]How do you get the results from a UIDatePicker upon change?

当 iOS 13 发布时,我的应用程序崩溃了,我不知道如何修复它(是的,是的,我知道 iOS 13 已经发布了一段时间,我只是在研究这个)。

我有一个 UIDatePicker,它被用作用户想要触发通知的时间的设置。 它采用 HH:MM 格式,通过 Inspector 中的 Date > Custom 派生。 我需要做的就是获取用户更改时间的任何内容并将其存储在变量中:一个代表小时,另一个代表分钟。 然后,这些变量将用于在单击 Save 按钮时更新 UserDefaults。

这就是我现在所拥有的,它曾经在 iOS 13 之前工作:

    @IBAction func startDayPickerControl(_ sender: AnyObject) {
        // sets the hour and min vars to whatever was changed on the startDayPicker

        hour = sender.hour
        min = sender.minute

        print("Start day set to \(hour):\(min)")
    }

它连接到 swift 文件,如下所示: 在此处输入图像描述

然后我的保存按钮会这样做:

@IBAction func saveSettingsButton(_ sender: AnyObject) {
       
        appUserSettings.set(hour, forKey: "hour")
        appUserSettings.set(min, forKey: "min")

        print("saveSettingsButton tapped")
    }

我无法弄清楚为什么日期选择器在更改时不输出数据。 我在print("Start day set to \(hour):\(min)")中得到的只是“Start day set to 0:0”

我尝试了一个测试项目,以防在 Swift 版本转换过程中出现问题。 这就是我所拥有的,我得到了相同的 0:0 打印结果:

`类视图控制器:UIViewController {

var hour = 8
var min = 30

@IBOutlet var CurrentSetTime: UILabel!

@IBAction func TimePicker(_ sender: Any) {
    // sets the hour and min vars to whatever was changed on the startDayPIcker
    // Xcode forced these changes from my above code here, but didn't on my original project
    hour = (sender as AnyObject).hour 
    min = (sender as AnyObject).minute
    
    CurrentSetTime.text = "\(hour):\(min)"
    print("Start day set to \(hour):\(min)")
}

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view.
}

}`

任何帮助将不胜感激!

谢谢!

更新:

我认为您处理发件人类型和字段的方式可能存在问题(我相信在您最近的问题编辑、AnyObject 与 Any 等方面发生了变化)

尝试这个:

@IBAction func TimePicker(_ sender: Any) {
    if let picker = sender as? UIDatePicker {
        let calendar = Calendar.current
        let tempHour = calendar.component(.hour, from: picker.date)
        let tempMinute = calendar.component(.minute, from: picker.date)

        Swift.print("hour: \(tempHour) minute: \(tempMinute)")
        hour = tempHour
        minute = tempMinute
    }
}

一旦它工作,您可以摆脱临时变量,但我认为这将有助于逐步了解并明确查看您的类型是什么以及您正在访问的发件人的哪些属性。


原答案:

您的选择器是如何连接到 your.xib 中的 @IBAction 的?

我不确定早期系统版本中的正确方法,但如果您将Value Changed连接连接到 controller @IBAction,它应该可以工作,如图所示:

UIDatePicker 和 Value Changed 连接的屏幕截图

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM