Almost all mobile apps have some sort of text entry. One of the main ways to do this is to simply add a text box. Adding a text box is both simple and easy to do, but we can take this a little further and improve the user experience.
Hiding the Keyboard
When the keyboard is shown by tapping a text box, the natural thing to do in order to hide it would be to tap outside the text box. However, this is not the case by default. But, this is easy to add by overriding the TouchesBegan
method of the ViewController
:
public override void TouchesBegan (NSSet touches, UIEvent evt) { // hide the keyboard from all views View.EndEditing (true); base.TouchesBegan (touches, evt); }
Enabling/Disabling the Return Key
There is a very simple way to let the user know that some text is required: disable the return key if no text is provided. This can be done in both the code and in the designer. In the code we set the EnablesReturnKeyAutomatically
property:
textField.EnablesReturnKeyAutomatically = true;
There is a checkbox in the designer labeled “Auto-enable Return Key”.
It is important to note that this does not apply if the keyboard type is NumberPad
as there is no return key for this keyboard type.
Changing the Keyboard Type
Another way to provide a basic restriction of the UI is to select a keyboard type. By selecting an appropriate keyboard type, the user can know what is expected to be entered as well as make the available characters easier to reach. If we only want numbers, we use the NumberPad
as this removes the other keys. If we are providing an entry for an email address, we use the EmailAddress
type which makes the @
and the .
key more available:
textField.KeyboardType = UIKeyboardType.NumberPad;
There is a dropdown in the designer labeled “Keyboard” which provides all the available options.
Changing the Return Key Type
Another nice user experience is to change the text for the “return” key, which provides additional hints as to what is going to happen with the input. There are several options that are available, such as Done
, Search
or Next
:
textField.ReturnKeyType = UIReturnKeyType.Done;
There is a dropdown in the designer labeled “Return Key” which provides all the available options.
Adding an Action to the Return Key
When the user presses the return key on the keyboard, we would expect something to happen, especially if it is a single line textbox. But, on iOS nothing happens, so we attach a delegate that can hide the keyboard and maybe do some more work. This is easy to add by assiging a delegate to the ShouldReturn
property of the UITextFied
:
textField.ShouldReturn = delegate { // hide the keyboard textField.ResignFirstResponder (); // the "return" logic here return true; };
Adding “Return” to the Number Pad
As the NumberPad
keyboard type does not have a return key, there is no default way to hide the keyboard, we have to manually add a handler to hide the keyboard when another view is tapped. Another way we can do this is to add a “Cancel” or a “Done” button accessory to the keyboard:
// create the toolbar UIToolbar numberToolbar = new UIToolbar (); numberToolbar.BarStyle = UIBarStyle.Default; numberToolbar.Translucent = true; // set the items numberToolbar.Items = new [] { // the cancel button new UIBarButtonItem (UIBarButtonSystemItem.Cancel, delegate { // hide the keyboard idEntryTextField.ResignFirstResponder (); }), // the space to separate the buttons new UIBarButtonItem (UIBarButtonSystemItem.FlexibleSpace, null), // the "continue" button new UIBarButtonItem ("Login"), UIBarButtonItemStyle.Done, delegate { // hide the keyboard idEntryTextField.ResignFirstResponder (); // the "return" logic here }) }; // fill the screen width numberToolbar.SizeToFit (); // set the accessory textField.InputAccessoryView = numberToolbar;