swift UIDatePicker在Mac Catalyst中不工作(Xcode 11 Beta 5)

oiopk7p5  于 2023-05-21  发布在  Swift
关注(0)|答案(2)|浏览(116)

我们正在使用Xcode 11 beta 5中的Swift将我们的iOS应用程序转换为Mac Catalyst兼容。
我们面临的问题是默认的DatePicker不显示在窗口中。
我正在尝试这个解决方案的mac和它将添加日期选择器在视图中,但我想要另一个适当的解决方案。还有其他建议吗

func datepickerWillLoad() {
    self.datePicker.datePickerMode = .date
    self.datePicker.maximumDate = Date()
    self.datePicker.backgroundColor = UIColor.Theme.lightBackground
    self.datePicker.setValue(UIColor.Theme.whiteColor, forKeyPath: "textColor")
    self.datePicker.addTarget(self, action: #selector(didChangedDatePickerValue), for: .valueChanged)
    
    //if user open picker and without change click on done
    self.dateOfBirthTextField.addTarget(self, action: #selector(didChangedDatePickerValue), for: .editingDidEnd)
    
    #if targetEnvironment(macCatalyst)
        datePicker.frame = CGRect(x: 0, y: self.view.frame.height - 200 , width: self.view.frame.width, height: 200)
        self.view.addSubview(datePicker)
    #else
        self.dateOfBirthTextField.inputView = datePicker
    #endif
}
b5lpy0ml

b5lpy0ml1#

在我看来,问题的原因是UIDatePicker被重新设计为一个紧凑的控制器,而不是iOS典型的轮子(可能是从Mac Catalyst 13.4+开始)。因此,无法再使用setValue函数将颜色方案应用于不存在的控制盘,并导致错误。
所以我试着把轮子模式放回我的UIDatePicker。因此,我在我的UIDatePicker中添加了以下行,这为我解决了这个问题:

if #available(macCatalyst 13.4, *) {
    myDatePicker.preferredDatePickerStyle = .wheels
    myDatePicker.datePickerMode = .date
} else {
    // Fallback on earlier versions
}

对于早期版本,我以前没有这个问题,所以我希望解决方案很好,但是如果你在早期版本中也遇到这个问题,请发表评论,这样我就可以调整我的代码了!:—)

注意:我注意到修改preferredDatePickerStyle后datePickerMode设置为默认模式,请务必在修改后强制datePickerMode!

toe95027

toe950272#

我发现如果我用self.datePicker.setValue(UIColor.Theme.whiteColor,forKeyPath:“textColor”),则这会导致应用程序在加载视图时崩溃。尝试删除这行代码,它应该与mac催化剂工作。

相关问题