summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.Platform.iOS
diff options
context:
space:
mode:
Diffstat (limited to 'Xamarin.Forms.Platform.iOS')
-rw-r--r--Xamarin.Forms.Platform.iOS/Renderers/DatePickerRenderer.cs46
-rw-r--r--Xamarin.Forms.Platform.iOS/Renderers/PickerRenderer.cs58
-rw-r--r--Xamarin.Forms.Platform.iOS/Renderers/TimePickerRenderer.cs23
3 files changed, 113 insertions, 14 deletions
diff --git a/Xamarin.Forms.Platform.iOS/Renderers/DatePickerRenderer.cs b/Xamarin.Forms.Platform.iOS/Renderers/DatePickerRenderer.cs
index 710aa364..39e7ab77 100644
--- a/Xamarin.Forms.Platform.iOS/Renderers/DatePickerRenderer.cs
+++ b/Xamarin.Forms.Platform.iOS/Renderers/DatePickerRenderer.cs
@@ -22,6 +22,7 @@ namespace Xamarin.Forms.Platform.iOS
{
UIDatePicker _picker;
UIColor _defaultTextColor;
+ bool _disposed;
IElementController ElementController => Element as IElementController;
@@ -29,7 +30,10 @@ namespace Xamarin.Forms.Platform.iOS
{
base.OnElementChanged(e);
- if (e.OldElement == null)
+ if (e.NewElement == null)
+ return;
+
+ if (Control == null)
{
var entry = new NoCaretField { BorderStyle = UITextBorderStyle.RoundedRect };
@@ -55,13 +59,10 @@ namespace Xamarin.Forms.Platform.iOS
SetNativeControl(entry);
}
- if (e.NewElement != null)
- {
- UpdateDateFromModel(false);
- UpdateMaximumDate();
- UpdateMinimumDate();
- UpdateTextColor();
- }
+ UpdateDateFromModel(false);
+ UpdateMaximumDate();
+ UpdateMinimumDate();
+ UpdateTextColor();
}
protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
@@ -120,5 +121,34 @@ namespace Xamarin.Forms.Platform.iOS
else
Control.TextColor = textColor.ToUIColor();
}
+
+ protected override void Dispose(bool disposing)
+ {
+ if (_disposed)
+ return;
+
+ _disposed = true;
+
+ if (disposing)
+ {
+ _defaultTextColor = null;
+
+ if (_picker != null)
+ {
+ _picker.RemoveFromSuperview();
+ _picker.ValueChanged -= HandleValueChanged;
+ _picker.Dispose();
+ _picker = null;
+ }
+
+ if (Control != null)
+ {
+ Control.EditingDidBegin -= OnStarted;
+ Control.EditingDidEnd -= OnEnded;
+ }
+ }
+
+ base.Dispose(disposing);
+ }
}
} \ No newline at end of file
diff --git a/Xamarin.Forms.Platform.iOS/Renderers/PickerRenderer.cs b/Xamarin.Forms.Platform.iOS/Renderers/PickerRenderer.cs
index c0f10d10..0905dcfc 100644
--- a/Xamarin.Forms.Platform.iOS/Renderers/PickerRenderer.cs
+++ b/Xamarin.Forms.Platform.iOS/Renderers/PickerRenderer.cs
@@ -11,6 +11,7 @@ namespace Xamarin.Forms.Platform.iOS
{
UIPickerView _picker;
UIColor _defaultTextColor;
+ bool _disposed;
IElementController ElementController => Element as IElementController;
@@ -139,13 +140,51 @@ namespace Xamarin.Forms.Platform.iOS
Control.TextColor = textColor.ToUIColor();
}
+ protected override void Dispose(bool disposing)
+ {
+ if (_disposed)
+ return;
+
+ _disposed = true;
+
+ if (disposing)
+ {
+ _defaultTextColor = null;
+
+ if (_picker != null)
+ {
+ if (_picker.Model != null)
+ {
+ _picker.Model.Dispose();
+ _picker.Model = null;
+ }
+
+ _picker.RemoveFromSuperview();
+ _picker.Dispose();
+ _picker = null;
+ }
+
+ if (Control != null)
+ {
+ Control.EditingDidBegin -= OnStarted;
+ Control.EditingDidEnd -= OnEnded;
+ }
+
+ if(Element != null)
+ ((INotifyCollectionChanged)Element.Items).CollectionChanged -= RowsCollectionChanged;
+ }
+
+ base.Dispose(disposing);
+ }
+
class PickerSource : UIPickerViewModel
{
- readonly PickerRenderer _renderer;
+ PickerRenderer _renderer;
+ bool _disposed;
- public PickerSource(PickerRenderer model)
+ public PickerSource(PickerRenderer renderer)
{
- _renderer = model;
+ _renderer = renderer;
}
public int SelectedIndex { get; internal set; }
@@ -183,6 +222,19 @@ namespace Xamarin.Forms.Platform.iOS
if(_renderer.Element.On<PlatformConfiguration.iOS>().UpdateMode() == UpdateMode.Immediately)
_renderer.UpdatePickerFromModel(this);
}
+
+ protected override void Dispose(bool disposing)
+ {
+ if (_disposed)
+ return;
+
+ _disposed = true;
+
+ if (disposing)
+ _renderer = null;
+
+ base.Dispose(disposing);
+ }
}
}
} \ No newline at end of file
diff --git a/Xamarin.Forms.Platform.iOS/Renderers/TimePickerRenderer.cs b/Xamarin.Forms.Platform.iOS/Renderers/TimePickerRenderer.cs
index f2632768..bfb96d81 100644
--- a/Xamarin.Forms.Platform.iOS/Renderers/TimePickerRenderer.cs
+++ b/Xamarin.Forms.Platform.iOS/Renderers/TimePickerRenderer.cs
@@ -10,17 +10,34 @@ namespace Xamarin.Forms.Platform.iOS
{
UIDatePicker _picker;
UIColor _defaultTextColor;
+ bool _disposed;
IElementController ElementController => Element as IElementController;
protected override void Dispose(bool disposing)
{
+ if (_disposed)
+ return;
+
+ _disposed = true;
+
if (disposing)
{
- Control.EditingDidBegin -= OnStarted;
- Control.EditingDidEnd -= OnEnded;
+ _defaultTextColor = null;
- _picker.ValueChanged -= OnValueChanged;
+ if (_picker != null)
+ {
+ _picker.RemoveFromSuperview();
+ _picker.ValueChanged -= OnValueChanged;
+ _picker.Dispose();
+ _picker = null;
+ }
+
+ if (Control != null)
+ {
+ Control.EditingDidBegin -= OnStarted;
+ Control.EditingDidEnd -= OnEnded;
+ }
}
base.Dispose(disposing);