From ee98ac91a7201dfb674beca048931c546c31b90f Mon Sep 17 00:00:00 2001 From: Gerald Versluis Date: Tue, 9 Nov 2021 16:30:20 +0100 Subject: [PATCH] Revert "Refactor observer lifecycle (#14828)" This reverts commit f95f671c416a4dc46da1f0783b5cda96d33b85fc. --- .../Renderers/EntryRenderer.cs | 21 ++++++++----------- 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/Xamarin.Forms.Platform.iOS/Renderers/EntryRenderer.cs b/Xamarin.Forms.Platform.iOS/Renderers/EntryRenderer.cs index 460f66d38ea..069d994aff0 100644 --- a/Xamarin.Forms.Platform.iOS/Renderers/EntryRenderer.cs +++ b/Xamarin.Forms.Platform.iOS/Renderers/EntryRenderer.cs @@ -40,7 +40,6 @@ public abstract class EntryRendererBase : ViewRenderer e) textField.ShouldChangeCharacters += ShouldChangeCharacters; _selectedTextRangeObserver = textField.AddObserver("selectedTextRange", NSKeyValueObservingOptions.New, UpdateCursorFromControl); - _clearButtonSublayerObserver = ClearButton?.Layer.AddObserver(new NSString("sublayers"), NSKeyValueObservingOptions.New, UpdateClearButtonSublayer); + ClearButton?.Layer.AddObserver(this, new NSString("sublayers"), NSKeyValueObservingOptions.New, IntPtr.Zero); } // When we set the control text, it triggers the UpdateCursorFromControl event, which updates CursorPosition and SelectionLength; @@ -160,6 +160,12 @@ protected override void OnElementChanged(ElementChangedEventArgs e) UpdateClearButtonVisibility(); } + public override void ObserveValue(NSString keyPath, NSObject ofObject, NSDictionary change, IntPtr context) + { + if (keyPath == new NSString("sublayers") && _defaultClearImage == null) + UpdateClearButtonVisibility(); + } + protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e) { if (e.PropertyName == Entry.PlaceholderProperty.PropertyName || e.PropertyName == Entry.PlaceholderColorProperty.PropertyName) @@ -434,15 +440,6 @@ void UpdateCursorFromControl(NSObservedChange obj) } } - void UpdateClearButtonSublayer(NSObservedChange obj) - { - if (Control == null || Element == null) - return; - - if (_defaultClearImage == null) - UpdateClearButtonVisibility(); - } - void UpdateCursorSelection() { if (_nativeSelectionIsUpdating || Control == null || Element == null)