From e520913d00f415a2b53962b241a75adb4f05f439 Mon Sep 17 00:00:00 2001 From: Andrei Misiukevich Date: Mon, 22 Oct 2018 02:24:44 +0300 Subject: [PATCH] https://github.com/xamarin/Xamarin.Forms/issues/2223 added possibility to change IsPassword for mac --- .../Renderers/EntryRenderer.cs | 92 +++++++++++-------- 1 file changed, 54 insertions(+), 38 deletions(-) diff --git a/Xamarin.Forms.Platform.MacOS/Renderers/EntryRenderer.cs b/Xamarin.Forms.Platform.MacOS/Renderers/EntryRenderer.cs index e31477ef86f..d38966a74c5 100644 --- a/Xamarin.Forms.Platform.MacOS/Renderers/EntryRenderer.cs +++ b/Xamarin.Forms.Platform.MacOS/Renderers/EntryRenderer.cs @@ -95,33 +95,12 @@ protected override void OnElementChanged(ElementChangedEventArgs e) if (Control == null) { - NSTextField textField; - if (e.NewElement.IsPassword) - textField = new NSSecureTextField(); - else - { - textField = new FormsNSTextField(); - (textField as FormsNSTextField).FocusChanged += TextFieldFocusChanged; - (textField as FormsNSTextField).Completed += OnCompleted; - } - - SetNativeControl(textField); - - _defaultTextColor = textField.TextColor; - - textField.Changed += OnChanged; - textField.EditingBegan += OnEditingBegan; - textField.EditingEnded += OnEditingEnded; + CreateControl(); } if (e.NewElement != null) { - UpdatePlaceholder(); - UpdateText(); - UpdateColor(); - UpdateFont(); - UpdateAlignment(); - UpdateMaxLength(); + UpdateControl(); } } @@ -171,22 +150,59 @@ protected override void Dispose(bool disposing) if (disposing && !_disposed) { _disposed = true; - if (Control != null) + ClearControl(); + } + + base.Dispose(disposing); + } + + void CreateControl() + { + NSTextField textField; + if (Element.IsPassword) + textField = new NSSecureTextField(); + else + { + textField = new FormsNSTextField(); + (textField as FormsNSTextField).FocusChanged += TextFieldFocusChanged; + (textField as FormsNSTextField).Completed += OnCompleted; + } + + SetNativeControl(textField); + + _defaultTextColor = textField.TextColor; + + textField.Changed += OnChanged; + textField.EditingBegan += OnEditingBegan; + textField.EditingEnded += OnEditingEnded; + } + + void ClearControl() + { + if (Control != null) + { + Control.EditingBegan -= OnEditingBegan; + Control.Changed -= OnChanged; + Control.EditingEnded -= OnEditingEnded; + var formsNSTextField = (Control as FormsNSTextField); + if (formsNSTextField != null) { - Control.EditingBegan -= OnEditingBegan; - Control.Changed -= OnChanged; - Control.EditingEnded -= OnEditingEnded; - var formsNSTextField = (Control as FormsNSTextField); - if (formsNSTextField != null) - { - formsNSTextField.FocusChanged -= TextFieldFocusChanged; - formsNSTextField.Completed -= OnCompleted; - } + formsNSTextField.FocusChanged -= TextFieldFocusChanged; + formsNSTextField.Completed -= OnCompleted; } } + } - base.Dispose(disposing); + void UpdateControl() + { + UpdatePlaceholder(); + UpdateText(); + UpdateColor(); + UpdateFont(); + UpdateAlignment(); + UpdateMaxLength(); } + void TextFieldFocusChanged(object sender, BoolEventArgs e) { ElementController.SetValueFromRenderer(VisualElement.IsFocusedPropertyKey, e.Value); @@ -231,10 +247,10 @@ void UpdateColor() void UpdatePassword() { - if (Element.IsPassword && (Control is NSSecureTextField)) - return; - if (!Element.IsPassword && !(Control is NSSecureTextField)) - return; + ClearControl(); + CreateControl(); + UpdateControl(); + Layout(); } void UpdateFont()