我试图在通过addTarget函数选择日期期间关闭datePicker。在我选择年份之后,它在我选择日期之前就关闭了,当我先选择日期时,我不能选择年份。我实际上想要的是,在选择年份时,它不应该被解雇。当我选择日期时,它应该会消失。是否有任何可能的解决方案,这与使用UIdatePicker?
这是我的密码
let datePicker : UIDatePicker = {
let date = UIDatePicker()
date.datePickerMode = .date
date.preferredDatePickerStyle = .compact
date.tintColor = UIColor(red: 83/255, green: 176/255, blue: 184/255, alpha: 1)
return date
}()
func config() {
datePicker.addTarget(self, action: #selector(selectButtonAction), for: .primaryActionTriggered)
}
@objc func selectButtonAction() {
// code logic ...
dismiss(animated: true)
}
1条答案
按热度按时间t8e9dugd1#
如果我理解正确的话,当用户在这种状态下选择一个日期时,你想关闭当前的VC:
但如果用户在此状态下更改了月份/年份,您不想执行任何操作:
没有官方支持的方法来做到这一点-你不应该以这种方式使用
UIDatePicker
。我建议添加一个“确定”按钮或类似的东西,让用户确认他们已经选择了一个日期。考虑一下用户在日历上误点击的情况,最终意外地关闭了整个VC。如果你问我的话,我觉得这很令人沮丧。
如果你真的想要这样的行为,我建议你自己做一个日期选择器。
也就是说,月-年选择器毕竟是一个
UIView
,并且可以在视图层次结构中找到。经过一些逆向工程,该视图被称为_UICalendarMonthYearSelector
,从iOS 16开始。因此,理论上,在
selectButtonAction
中,您可以尝试在层次结构中找到此视图,如果找到了,则不执行dismiss
。这严重受制于UIDatePicker
和UICalendarView
实现的变化。这在将来可能会打破。如果您真的想关闭
.compact
样式的日期选择器显示的弹出窗口,而不是self
,请参阅this answer of mine。