@@ -14,9 +14,10 @@ namespace Xamarin.CommunityToolkit.UI.Views
14
14
{
15
15
public class PopupRenderer : UIViewController , IVisualElementRenderer
16
16
{
17
- readonly WeakEventManager eventManager = new WeakEventManager ( ) ;
18
17
bool isDisposed ;
19
18
19
+ protected static WeakEventManager EventManager { get ; private set ; } = new WeakEventManager ( ) ;
20
+
20
21
public IVisualElementRenderer Control { get ; private set ; }
21
22
22
23
public BasePopup Element { get ; private set ; }
@@ -32,15 +33,11 @@ public class PopupRenderer : UIViewController, IVisualElementRenderer
32
33
public event EventHandler < PropertyChangedEventArgs > ElementPropertyChanged ;
33
34
34
35
[ Preserve ( Conditional = true ) ]
35
- public PopupRenderer ( )
36
- {
37
- eventManager . AddEventHandler ( OnDismiss , nameof ( OnDismiss ) ) ;
38
- }
36
+ public PopupRenderer ( ) =>
37
+ EventManager . AddEventHandler ( OnDismiss , nameof ( OnDismiss ) ) ;
39
38
40
- public void SetElementSize ( Size size )
41
- {
39
+ public void SetElementSize ( Size size ) =>
42
40
Control ? . SetElementSize ( size ) ;
43
- }
44
41
45
42
public override void ViewDidLayoutSubviews ( )
46
43
{
@@ -55,10 +52,8 @@ public override void ViewDidAppear(bool animated)
55
52
ModalInPopover = ! Element . IsLightDismissEnabled ;
56
53
}
57
54
58
- public SizeRequest GetDesiredSize ( double widthConstraint , double heightConstraint )
59
- {
60
- return NativeView . GetSizeRequest ( widthConstraint , heightConstraint ) ;
61
- }
55
+ public SizeRequest GetDesiredSize ( double widthConstraint , double heightConstraint ) =>
56
+ NativeView . GetSizeRequest ( widthConstraint , heightConstraint ) ;
62
57
63
58
void IVisualElementRenderer . SetElement ( VisualElement element )
64
59
{
@@ -135,10 +130,8 @@ void SetViewController()
135
130
ViewController = currentPageRenderer . ViewController ;
136
131
}
137
132
138
- void SetEvents ( )
139
- {
133
+ void SetEvents ( ) =>
140
134
Element . Dismissed += OnDismissed ;
141
- }
142
135
143
136
void SetSize ( )
144
137
{
@@ -187,10 +180,8 @@ void SetLayout()
187
180
}
188
181
}
189
182
190
- void SetBackgroundColor ( )
191
- {
183
+ void SetBackgroundColor ( ) =>
192
184
Control . NativeView . BackgroundColor = Element . Color . ToUIColor ( ) ;
193
- }
194
185
195
186
void SetView ( )
196
187
{
@@ -205,13 +196,11 @@ void SetPresentationController()
205
196
206
197
// Setting PermittedArrowDirector to 0 breaks the Popover layout. It would be nice if there is no anchor to remove the arrow.
207
198
( ( UIPopoverPresentationController ) PresentationController ) . PermittedArrowDirections = UIPopoverArrowDirection . Up ;
208
- ( ( UIPopoverPresentationController ) PresentationController ) . Delegate = new PopoverDelegate ( eventManager ) ;
199
+ ( ( UIPopoverPresentationController ) PresentationController ) . Delegate = new PopoverDelegate ( ) ;
209
200
}
210
201
211
- void AddToCurrentPageViewController ( )
212
- {
202
+ void AddToCurrentPageViewController ( ) =>
213
203
ViewController . PresentViewController ( this , true , ( ) => Element . OnOpened ( ) ) ;
214
- }
215
204
216
205
void OnDismissed ( object sender , PopupDismissedEventArgs e ) =>
217
206
ViewController . DismissViewControllerAsync ( true ) ;
@@ -224,6 +213,9 @@ protected override void Dispose(bool disposing)
224
213
isDisposed = true ;
225
214
if ( disposing )
226
215
{
216
+ EventManager . RemoveEventHandler ( OnDismiss , nameof ( OnDismiss ) ) ;
217
+ EventManager = null ;
218
+
227
219
if ( Element != null )
228
220
{
229
221
Element . PropertyChanged -= OnElementPropertyChanged ;
@@ -263,16 +255,11 @@ void OnDismiss(object sender, EventArgs e)
263
255
264
256
class PopoverDelegate : UIPopoverPresentationControllerDelegate
265
257
{
266
- readonly WeakEventManager eventManager ;
267
-
268
- public PopoverDelegate ( WeakEventManager eventManager ) =>
269
- this . eventManager = eventManager ;
270
-
271
258
public override UIModalPresentationStyle GetAdaptivePresentationStyle ( UIPresentationController forPresentationController ) =>
272
259
UIModalPresentationStyle . None ;
273
260
274
261
public override void DidDismiss ( UIPresentationController presentationController ) =>
275
- eventManager . RaiseEvent ( this , new EventArgs ( ) , nameof ( OnDismiss ) ) ;
262
+ EventManager . RaiseEvent ( this , new EventArgs ( ) , nameof ( OnDismiss ) ) ;
276
263
}
277
264
}
278
265
}
0 commit comments