1
- using Foundation ;
1
+ using System . Drawing ;
2
+ using Foundation ;
2
3
using Microsoft . Maui . Handlers ;
3
4
using Microsoft . Maui . Platform ;
4
5
using UIKit ;
5
6
6
7
namespace AuroraControls ;
7
8
8
- public partial class NumericEntryHandler : EntryHandler
9
+ public partial class NumericEntryHandler : EntryHandler , IDisposable
9
10
{
11
+ private UIBarButtonItem _doneButton ;
12
+
10
13
protected override void ConnectHandler ( MauiTextField platformView )
11
14
{
12
15
base . ConnectHandler ( platformView ) ;
13
16
17
+ var toolbar = new UIToolbar ( new RectangleF ( 0 , 0 , ( float ) UIScreen . MainScreen . Bounds . Width , 44 ) ) { BarStyle = UIBarStyle . Default , Translucent = true } ;
18
+ _doneButton = new UIBarButtonItem ( UIBarButtonSystemItem . Done ) ;
19
+ _doneButton . Clicked += DoneButtonOnClicked ;
20
+
21
+ toolbar . Items = [ new UIBarButtonItem ( UIBarButtonSystemItem . FlexibleSpace ) , _doneButton , ] ;
22
+ platformView . InputAccessoryView = toolbar ;
23
+
14
24
platformView . ShouldChangeCharacters += OnShouldChangeCharacters ;
15
25
}
16
26
17
27
protected override void DisconnectHandler ( MauiTextField platformView )
18
28
{
19
29
platformView . ShouldChangeCharacters -= OnShouldChangeCharacters ;
30
+ _doneButton . Clicked -= DoneButtonOnClicked ;
31
+
32
+ PlatformView . InputAccessoryView ? . Dispose ( ) ;
33
+ PlatformView . InputAccessoryView = null ;
20
34
21
35
base . DisconnectHandler ( platformView ) ;
22
36
}
23
37
38
+ private void DoneButtonOnClicked ( object ? sender , EventArgs e )
39
+ {
40
+ this . PlatformView . ResignFirstResponder ( ) ;
41
+ }
42
+
24
43
private bool OnShouldChangeCharacters ( UITextField textField , NSRange range , string replacementString )
25
44
{
26
45
string originalSource = replacementString ;
@@ -36,4 +55,18 @@ private bool OnShouldChangeCharacters(UITextField textField, NSRange range, stri
36
55
37
56
return IsValid ( final , NumericEntryVirtualView . CultureInfo , NumericEntryVirtualView . ValueType ) ;
38
57
}
58
+
59
+ protected virtual void Dispose ( bool disposing )
60
+ {
61
+ if ( disposing )
62
+ {
63
+ _doneButton . Dispose ( ) ;
64
+ }
65
+ }
66
+
67
+ public void Dispose ( )
68
+ {
69
+ Dispose ( true ) ;
70
+ GC . SuppressFinalize ( this ) ;
71
+ }
39
72
}
0 commit comments