From e1318b12afa0fea22b22d210c0c5f57bc52c0c11 Mon Sep 17 00:00:00 2001 From: asharghi Date: Wed, 23 Sep 2020 16:57:47 +0200 Subject: [PATCH] fix(ios): time-picker and date-picker for iOS 14 (#8876) --- .../ui/date-picker/date-picker.ios.ts | 18 +++++++++++++----- .../ui/time-picker/time-picker.ios.ts | 18 +++++++++++++----- .../ios/objc-x86_64/objc!UIKit.d.ts | 2 ++ 3 files changed, 28 insertions(+), 10 deletions(-) diff --git a/nativescript-core/ui/date-picker/date-picker.ios.ts b/nativescript-core/ui/date-picker/date-picker.ios.ts index f60a2f9ae..7c04a8980 100644 --- a/nativescript-core/ui/date-picker/date-picker.ios.ts +++ b/nativescript-core/ui/date-picker/date-picker.ios.ts @@ -2,9 +2,13 @@ import { DatePickerBase, yearProperty, monthProperty, dayProperty, dateProperty, maxDateProperty, minDateProperty, colorProperty, Color } from "./date-picker-common"; - +import { device } from '../../platform'; export * from "./date-picker-common"; +const SUPPORT_DATE_PICKER_STYLE = parseFloat(device.os) >= 14.0; +const SUPPORT_TEXT_COLOR = parseFloat(device.os) < 14.0; +const DEFAULT_DATE_PICKER_STYLE = 1; + export class DatePicker extends DatePickerBase { private _changeHandler: NSObject; public nativeViewProtected: UIDatePicker; @@ -12,7 +16,9 @@ export class DatePicker extends DatePickerBase { public createNativeView() { const picker = UIDatePicker.new(); picker.datePickerMode = UIDatePickerMode.Date; - + if (SUPPORT_DATE_PICKER_STYLE) { + picker.preferredDatePickerStyle = DEFAULT_DATE_PICKER_STYLE; + } return picker; } @@ -75,11 +81,13 @@ export class DatePicker extends DatePickerBase { } [colorProperty.getDefault](): UIColor { - return this.nativeViewProtected.valueForKey("textColor"); + return SUPPORT_TEXT_COLOR ? this.nativeViewProtected.valueForKey("textColor") : UIColor.new(); } [colorProperty.setNative](value: Color | UIColor) { - const picker = this.nativeViewProtected; - picker.setValueForKey(value instanceof Color ? value.ios : value, "textColor"); + if (SUPPORT_TEXT_COLOR) { + const picker = this.nativeViewProtected; + picker.setValueForKey(value instanceof Color ? value.ios : value, "textColor"); + } } } diff --git a/nativescript-core/ui/time-picker/time-picker.ios.ts b/nativescript-core/ui/time-picker/time-picker.ios.ts index 87c1c0c73..7c44cf56a 100644 --- a/nativescript-core/ui/time-picker/time-picker.ios.ts +++ b/nativescript-core/ui/time-picker/time-picker.ios.ts @@ -3,9 +3,13 @@ import { minuteProperty, minMinuteProperty, maxMinuteProperty, hourProperty, minHourProperty, maxHourProperty, colorProperty, Color } from "./time-picker-common"; - +import { device } from '../../platform'; export * from "./time-picker-common"; +const SUPPORT_DATE_PICKER_STYLE = parseFloat(device.os) >= 14.0; +const SUPPORT_TEXT_COLOR = parseFloat(device.os) < 14.0; +const DEFAULT_DATE_PICKER_STYLE = 1; + function getDate(hour: number, minute: number): Date { let components = NSDateComponents.alloc().init(); components.hour = hour; @@ -32,7 +36,9 @@ export class TimePicker extends TimePickerBase { createNativeView() { const picker = UIDatePicker.new(); picker.datePickerMode = UIDatePickerMode.Time; - + if (SUPPORT_DATE_PICKER_STYLE) { + picker.preferredDatePickerStyle = DEFAULT_DATE_PICKER_STYLE; + } return picker; } @@ -108,11 +114,13 @@ export class TimePicker extends TimePickerBase { } [colorProperty.getDefault](): UIColor { - return this.nativeViewProtected.valueForKey("textColor"); + return SUPPORT_TEXT_COLOR ? this.nativeViewProtected.valueForKey("textColor") : UIColor.new(); } [colorProperty.setNative](value: Color | UIColor) { - const color = value instanceof Color ? value.ios : value; - this.nativeViewProtected.setValueForKey(color, "textColor"); + if (SUPPORT_TEXT_COLOR) { + const color = value instanceof Color ? value.ios : value; + this.nativeViewProtected.setValueForKey(color, "textColor"); + } } } diff --git a/tns-platform-declarations/ios/objc-x86_64/objc!UIKit.d.ts b/tns-platform-declarations/ios/objc-x86_64/objc!UIKit.d.ts index c3c842480..a375a00dd 100644 --- a/tns-platform-declarations/ios/objc-x86_64/objc!UIKit.d.ts +++ b/tns-platform-declarations/ios/objc-x86_64/objc!UIKit.d.ts @@ -6101,6 +6101,8 @@ declare class UIDatePicker extends UIControl implements NSCoding { minuteInterval: number; + preferredDatePickerStyle: number; + timeZone: NSTimeZone; constructor(o: { coder: NSCoder; }); // inherited from NSCoding