12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- import { UIDatePicker, UIControl, UIDatePickerStyle } from "UIKit"
- import { DateFormatter } from "CoreFoundation"
- export class NativeTimePicker {
- element : UniNativeViewElement
- timePicker : UIDatePicker
- h : number
- m : number
- constructor(element : UniNativeViewElement, hour : number, minute : number) {
- this.element = element
- this.timePicker = new UIDatePicker()
- this.h = hour
- this.m = minute
- super.init()
- // 在 swift target-action 对应的方法需要以OC的方式来调用,那么OC语言中用Selector来表示一个方法的名称(又称方法选择器),创建一个Selector可以使用 Selector("functionName") 的方式。
- const method = Selector("timeChange")
- // 监听时间变化回调
- this.timePicker.addTarget(this, action = method, for = UIControl.Event.valueChanged)
- // 设置为时间选择模式
- this.timePicker.datePickerMode = UIDatePicker.Mode.time
- // 设置外观样式为 wheels
- if (UTSiOS.available("iOS 13.4, *")) {
- this.timePicker.preferredDatePickerStyle = UIDatePickerStyle.wheels
- }
- this.updateTime()
- this.bindView(hour, minute)
- }
- // element 绑定原生view
- bindView(hour : number, minute : number) {
- this.element.bindIOSView(this.timePicker);
- }
- // 设置时
- setHour(hour : number) {
- this.h = hour
- this.updateTime()
- }
- // 设置分
- setMinute(minute : number) {
- this.m = minute
- this.updateTime()
- }
- // 更新显示
- updateTime() {
- let formatter = DateFormatter()
- formatter.dateFormat = "HH:mm"
- let date = formatter.date(from = `${this.h}:${this.m}`)
- if (date != null) {
- this.timePicker.date = date!
- }
- }
- /**
- * 按钮点击回调方法
- * 在 swift 中,所有target-action (例如按钮的点击事件,NotificationCenter 的通知事件等)对应的 action 函数前面都要使用 @objc 进行标记。
- */
- @objc timeChange() {
- // 发送事件
- console.log("timeChange")
- let formatter = DateFormatter()
- formatter.dateFormat = "HH"
- let hourString = formatter.string(from = this.timePicker.date)
- formatter.dateFormat = "mm"
- let minuteString = formatter.string(from = this.timePicker.date)
- const detail = { "hour": hourString, "minute": minuteString }
- const event = new UniNativeViewEvent("timechanged", detail)
- this.element.dispatchEvent(event)
- }
- destroy() {
- UTSiOS.destroyInstance(this)
- }
- }
|