4
4
5
5
namespace AuroraControls ;
6
6
7
- public partial class CalendarPickerHandler : DatePickerHandler
7
+ public partial class CalendarPickerHandler : DatePickerHandler , IDisposable
8
8
{
9
+ private UIBarButtonItem ? _clearButton ;
10
+ private UIBarButtonItem ? _doneButton ;
11
+
9
12
public static PropertyMapper < CalendarPicker , CalendarPickerHandler > NullableDatePickerPropertyMapper =
10
13
new ( ViewMapper )
11
14
{
@@ -52,21 +55,15 @@ protected override void ConnectHandler(MauiDatePicker platformView)
52
55
53
56
if ( platformView . InputAccessoryView is UIToolbar tb )
54
57
{
55
- var clearButton = new UIBarButtonItem ( "Clear" , UIBarButtonItemStyle . Plain ,
56
- ( _ , _ ) =>
57
- {
58
- if ( this . VirtualView is not CalendarPicker el )
59
- {
60
- return ;
61
- }
62
-
63
- el . Unfocus ( ) ;
64
- el . Date = null ;
65
- } ) ;
66
-
67
- var items = new List < UIBarButtonItem > ( tb . Items ) ;
68
- items . Insert ( 0 , clearButton ) ;
69
- tb . Items = items . ToArray ( ) ;
58
+ _clearButton = new UIBarButtonItem ( ) ;
59
+ _clearButton . Style = UIBarButtonItemStyle . Plain ;
60
+ _clearButton . Title = "Clear" ;
61
+ _clearButton . Clicked += ClearButtonOnClicked ;
62
+
63
+ _doneButton = new UIBarButtonItem ( UIBarButtonSystemItem . Done ) ;
64
+ _doneButton . Clicked += DoneButtonOnClicked ;
65
+
66
+ tb . Items = [ _clearButton , new UIBarButtonItem ( UIBarButtonSystemItem . FlexibleSpace ) , _doneButton ] ;
70
67
}
71
68
}
72
69
@@ -77,6 +74,16 @@ protected override void DisconnectHandler(MauiDatePicker platformView)
77
74
dp . ValueChanged -= OnDatePickerValueChanged ;
78
75
}
79
76
77
+ if ( _clearButton != null )
78
+ {
79
+ _clearButton . Clicked -= ClearButtonOnClicked ;
80
+ }
81
+
82
+ if ( _doneButton != null )
83
+ {
84
+ _doneButton . Clicked -= DoneButtonOnClicked ;
85
+ }
86
+
80
87
base . DisconnectHandler ( platformView ) ;
81
88
}
82
89
@@ -95,7 +102,35 @@ private void OnDatePickerValueChanged(object sender, EventArgs e)
95
102
}
96
103
}
97
104
98
- public void TryShowEmptyState ( )
105
+ private void DoneButtonOnClicked ( object ? sender , EventArgs e )
106
+ {
107
+ if (
108
+ this . PlatformView ? . InputView ? . Subviews . FirstOrDefault ( ) is not UIDatePicker datePicker ||
109
+ this . VirtualView is not CalendarPicker calendarPicker ||
110
+ calendarPicker . UpdateMode != CalendarPickerUpdateMode . WhenDone )
111
+ {
112
+ return ;
113
+ }
114
+
115
+ calendarPicker . Date = datePicker . Date . ToDateTime ( ) ;
116
+
117
+ this . TryShowEmptyState ( ) ;
118
+
119
+ this . PlatformView . ResignFirstResponder ( ) ;
120
+ }
121
+
122
+ private void ClearButtonOnClicked ( object ? sender , EventArgs e )
123
+ {
124
+ if ( this . VirtualView is not CalendarPicker el )
125
+ {
126
+ return ;
127
+ }
128
+
129
+ el . Unfocus ( ) ;
130
+ el . Date = null ;
131
+ }
132
+
133
+ private void TryShowEmptyState ( )
99
134
{
100
135
if ( this . VirtualView is not CalendarPicker el )
101
136
{
@@ -111,4 +146,23 @@ public void TryShowEmptyState()
111
146
: string . Empty ;
112
147
} ) ;
113
148
}
149
+
150
+ protected virtual void Dispose ( bool disposing )
151
+ {
152
+ if ( ! disposing )
153
+ {
154
+ return ;
155
+ }
156
+
157
+ _clearButton ? . Dispose ( ) ;
158
+ _doneButton ? . Dispose ( ) ;
159
+ }
160
+
161
+ public void Dispose ( )
162
+ {
163
+ Dispose ( true ) ;
164
+ GC . SuppressFinalize ( this ) ;
165
+ }
166
+
167
+ ~ CalendarPickerHandler ( ) => Dispose ( false ) ;
114
168
}
0 commit comments