אור*_*hpt 50 uidatepicker uikit swift ios14
我有这个正常UIDatePicker(对不起,它不是英文,请忽略):

但问题是它只在我按下日期选择器时出现:

而且我想知道如何仅使用代码显示第一张图像中的日期选择器(它用模糊效果覆盖所有屏幕),因此用户无需按日期选择器来显示日期选择器。谢谢。
您可以使用带有.compact样式的 datePicker并UILabel在其顶部放置一个并为其设置背景颜色以隐藏其datePicker背后,并确保禁用标签用户交互,然后您应该能够点击 datePicker,它将显示modal 然后更改 datePicker 的值您可以使用自己的日期格式化程序相应地设置标签的文本,您也可以将 datePicker 和标签都放在 a 中UIView并使其剪辑到边界
小智 7
我也有同样的问题。我使用以下黑客:
let datePicker = UIDatePicker(frame: CGRect(x: 0, y: 0, width: 50, height: 50))
datePicker.preferredDatePickerStyle = .compact
// Removes Labels
datePicker.subviews.forEach({ $0.subviews.forEach({ $0.removeFromSuperview() }) })
Run Code Online (Sandbox Code Playgroud)
然后我简单地在视图顶部添加这个日期选择器,它应该打开这个弹出窗口。
无法从代码中打开UIDatePickerwithUIKit14
UIDatePicker 没有用于执行此操作的 APIUIKit不允许我们创建一个UIEvents或UITouch其中有任何影响的对象UIKit。小智 7
我不知道这是否仍然有效,但是您可以使用.inline新的 UIDatePicker 的样式。然后使用您自己的视图和动画来模仿 DatePicker 的外观.compact。
let secondDatePicker = UIDatePicker()
secondDatePicker.preferredDatePickerStyle = .inline
self.view.addSubview(secondDatePicker)
secondDatePicker.translatesAutoresizingMaskIntoConstraints = false
secondDatePicker.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
secondDatePicker.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
Run Code Online (Sandbox Code Playgroud)
不幸的是,不可能以编程方式显示日期选择器弹出窗口,至少不会求助于可能导致您的应用被拒绝的黑客:
UIDatePicker 控件不公开任何可以通过编程触发的事件sendActions(for:)-allControlEvents返回一个空选项集
以编程方式模拟用户点击在 iOS 上正式是不可能的 - 没有公共 API 来实现这一点,所有解决方法都意味着诉诸私有 API
如果以上还不够,UIDatePicker 的 UI 结构由私有类组成:
结论是,在当前状态下,UIDatePicker只能通过用户交互来控制 UI。也许这会在未来发生变化,例如UIButton's 公开操作以触发与用户点击按钮时相同的行为,因此UIDatePicker将来可能会公开此类操作。
更新:这在 iOS 15 上不再适用。
@Amr Mohamed 的答案很聪明,在日期选择器视图上放置一个标签,但这也会导致点击日期选择器视图时出现故障,当日期选择器 vc 动画显示时,您还可以看到日期选择器。
因此,我们需要“隐藏”日期选择器视图,但又保持其交互性。(我们不能只使用isHidden = trueor alpha = 0,否则它就不再可点击了)
这就是我在项目中的做法:
extension UIView {
func loopDescendantViews(_ closure: (_ subView: UIView) -> Void) {
for v in subviews {
closure(v)
v.loopDescendantViews(closure)
}
}
}
let datePicker = UIDatePicker()
datePicker.preferredDatePickerStyle = .compact
datePicker.loopDescendantViews {
$0.alpha = $0 is UIControl ? 1 : 0
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以将此不可见的日期选择器放在标签/其他视图的顶部。一旦您点击标签(实际上点击了日期选择器),日期选择器 vc 就会动画显示。
| 归档时间: |
|
| 查看次数: |
22629 次 |
| 最近记录: |