Building great forms for users to enter information on iOS is tough. There's a lot of small details which are easy to get wrong. Today we'll begin looking at ways to improve this process.
First up, is navigation. π
Allowing for quick and simple navigation from one form field to the next can dramatically reduce friction for our users.
We'll use a great new library from Thanh Pham called UITextField-Navigation to pull this off. Let's get started.
UITextField-Navigation is built around the concept of telling each field which field should be "next" in the form.
Once we've done that for all of our fields, the library takes over and displays a navigation bar above the keyboard automatically:
We can set up these relationships super easily in in Interface Builder:
...or in code:
let nameTextField = UITextField()
let bioTextView = UITextView()
nameTextField.nextNavigationField = bioTextView
Now, whenever a user begins editing a UITextField
or UITextView
in our app, a navigation toolbar will automatically be shown above the keyboard:
We can use UIAppearance
to completely customize the look and feel of the toolbar:
NavigationFieldToolbar.appearance().barStyle = .black
NavigationFieldToolbar.appearance().backgroundColor = UIColor.purple
NavigationFieldToolbarButtonItem.appearance().tintColor = UIColor.white
Last but not least, we aren't limited to a "standard" set of buttons/items in the toolbar.
We'll use the navigationFieldToolBar
optional property that the library adds to UITextField
and UITextView
to first customize some individual properties directly:
guard let toolbar = nameTextField.navigationFieldToolbar else { return }
toolbar.barStyle = .default
toolbar.backgroundColor = UIColor.red
toolbar.previousButton.title = "Backward!"
toolbar.nextButton.title = "Onward!"
toolbar.doneButton.title = "Dismiss"
...then create our own array of toolbar items:
let expandButton = UIBarButtonItem(
title: "Expand",
style: .plain,
target: self,
action: #selector(expandForm)
)
let flexible = UIBarButtonItem(
barButtonSystemItem: .flexibleSpace,
target: nil,
action: nil
)
toolbar.items = [
toolbar.previousButton,
toolbar.nextButton,
flexible,
expandButton,
flexible,
toolbar.doneButton
]
Neat!
Learn more about UITextField-Navigation at git.io/textfieldnav.