Bug 21630 - Editor Unfocus() does not hide keyboard on iOS
Summary: Editor Unfocus() does not hide keyboard on iOS
Alias: None
Product: Forms
Classification: Xamarin
Component: Forms ()
Version: 1.2.1
Hardware: Macintosh Mac OS
: Normal normal
Target Milestone: ---
Assignee: Bugzilla
Depends on:
Reported: 2014-07-28 09:09 UTC by leankitryan
Modified: 2015-05-19 16:56 UTC (History)
8 users (show)

Is this bug a regression?: ---
Last known good build:

sample forms content page which does not hide keyboard (1.02 KB, application/octet-stream)
2014-07-28 09:09 UTC, leankitryan

Notice (2018-05-24): bugzilla.xamarin.com is now in read-only mode.

Please join us on Visual Studio Developer Community and in the Xamarin and Mono organizations on GitHub to continue tracking issues. Bugzilla will remain available for reference in read-only mode. We will continue to work on open Bugzilla bugs, copy them to the new locations as needed for follow-up, and add the new items under Related Links.

Our sincere thanks to everyone who has contributed on this bug tracker over the years. Thanks also for your understanding as we make these adjustments and improvements for the future.

Please create a new report on Developer Community or GitHub with your current version information, steps to reproduce, and relevant error messages or log files if you are hitting an issue that looks similar to this resolved bug and you do not yet see a matching new report.

Related Links:

Description leankitryan 2014-07-28 09:09:44 UTC
Created attachment 7506 [details]
sample forms content page which does not hide keyboard

Attaching example. Per advice from Xamarin Forums, View.Unfocus() should hide the keyboard. It doesn't seem to work on iOS. Attached working sample.
Comment 1 Jonathan Moosekian 2014-08-06 12:47:54 UTC
I was trying to see what the differences between Editor and Entry were, since Entry correctly hides the keyboard when Unfocus() is called, and I noticed this in the EditorRenderer:

		private void OnEnded(object sender, EventArgs eventArgs)
			base.Element.IsFocused = true;

		private void OnStarted(object sender, EventArgs eventArgs)
			base.Element.IsFocused = false;

It seems like the logic to set IsFocused is reversed. OnStarted should be setting IsFocused = true while OnEnded should be setting it to false.

I wrote a test and derived from the EditorRenderer and overrode this behavior in OnElementChanged using reflection, like so:

			textView.Started += (sender, ev) => 
				typeof(Editor).BaseType.GetProperty("IsFocused").SetValue(Element, true, null);

			textView.Ended += (sender, ev) => 
				typeof(Editor).BaseType.GetProperty("IsFocused").SetValue(Element, false, null);

After doing this, calling the Editor's Unfocus() method from a button hides the keyboard.
Comment 2 Nathan Perry 2014-12-16 10:02:12 UTC
This seems to have cropped back up in Forms 1.3.0 pre-3.
Comment 3 Rui Marinho 2014-12-16 13:37:42 UTC
Hi Nathan it seems fixed in pre-3. Using this sample code provided the keyboard is hidden.
Comment 4 Michael 2015-05-19 16:56:34 UTC
I have confirmed this bug was fixed in Xamarin.Forms 1.4.2