tree: 6683e0255fbe35121cf9010ae2727b30fa31b238 [path history] [tgz]
  1. docs/
  2. examples/
  3. src/
  4. styling/
  5. tests/
  6. .jazzy.yaml
  7. README.md
components/TextFields/README.md

Text Fields

Text fields allow users to input text into your app. They are a direct connection to your users' thoughts and intentions via on-screen, or physical, keyboard. The Material Design Text Fields take the familiar element to new levels by adding useful animations, character counts, helper text, error states, and styles.

MDC‘s text fields come in several styles and have a great range of customization. Google’s UX research has determined that Outlined and Filled (aka ‘text box’) styles perform the best by a large margin. So use MDCTextInputControllerOutlinedField , MDCTextInputControllerTextFieldBox, and MDCTextInputControllerTextArea if you can and set colors and fonts that match your company's branding.

For more information on text field styles, and animated images of each style in action, see Text Field Styles.

Design & API Documentation

Installation

Requirements

  • Xcode 8.0 or higher.
  • iOS SDK version 8.0 or higher.

Installation with CocoaPods

To add this component to your Xcode project using CocoaPods, add the following to your Podfile:

pod 'MaterialComponents/TextFields'

Then run the following command:

pod install

Overview

Text Fields provides both a single-line version based on UITextField and a multi-line version backed by UITextView as well as objects that customize the text fields' behavior and appearance called ‘Text Input Controllers’.

The actual components (MDCTextField & MDCMultilineTextField) are ‘dumb’: they do not have styles, animations, or advanced features. They are designed to be controlled from the outside, via very liberal public API, with a text input controller.

Most text input controllers included are based on MDCTextInputControllerDefault which manipulates the exposed elements of the text field to make placeholders float.

There is also a text input controller for full-width forms (MDCTextInputControllerFullWidth). Like MDCTextInputControllerDefault, it also handles errors and character counting.

Customize the included text input controllers via their parameters or create your own to express your app's brand identity thru typography, color, and animation: if the placeholder should move, add constraints or change the frame. If the trailing label should display validation information, change the text and color it.

This pattern is not a delegation or data source-like relationship but rather a controller-to-view relationship: the text field does not require nor expect to be served data or instruction but is instead malleable and easily influenced by outside interference.

Text Field Classes: The Inputs

Text Field

This is a single-line text input. It‘s subclassed from UITextField and supports all the features you’d expect from a UITextField:

  • Placeholder
  • Overlay views (left and right / leading and trailing)
  • Custom fonts, colors
  • Clear button

as well as new features:

  • Underline
  • Labels below the input
  • Custom layouts
  • Persistable placeholder
  • Border view

Multi-line Text Field

This is a multi-line text input. It's subclassed from UIView with an embedded UITextView. It supports all the features of the single-line text field and UITextView plus:

  • Minimum number of lines

Text Field Classes: The Controllers

Default Text Input Controller

This class holds all the ‘magic’ logic necessary to make the naturally ‘dumb’ text field and text view behave with:

  • Animations
  • Styles
  • Errors
  • Character counts

Full Width Text Input Controller

Similar to the default text input controller but optimized for full width forms like emails.

Usage

A text field that conforms to MDCTextInput can be added to a view hierarchy the same way UITextField and UIView are. But to achieve the animations and presentations defined by the guidelines (floating placeholders, character counts), a controller that conforms to protocol MDCTextInputController must be initialized to manage the text field.

NOTE: Expect to interact with both the text field (for the traditional API) and the controller (for changes affecting the presentation and state).

Importing

Before using Text Fields, you'll need to import it:

Swift

import MaterialComponents.MaterialTextFields

Objective-C

#import "MaterialTextFields.h"

Examples - Single-line

Text Field with Floating Placeholder

Swift

let textFieldFloating = MDCTextField()
scrollView.addSubview(textFieldFloating)

textFieldFloating.placeholder = "Full Name"
textFieldFloating.delegate = self

textFieldControllerFloating = MDCTextInputControllerDefault(input: textFieldFloating) // Hold on as a property

Objective-C

MDCTextField *textFieldFloating = [[MDCTextField alloc] init];
[self.scrollView addSubview:textFieldFloating];

textFieldFloating.placeholder = @"Full Name";
textFieldFloating.delegate = self;

self.textFieldControllerFloating = [[MDCTextInputControllerDefault alloc] initWithTextInput:textFieldFloating];

Text Field with Character Count and Inline Placeholder

Swift

// First the text field component is setup just like a UITextField
let textFieldDefaultCharMax = MDCTextField()
scrollView.addSubview(textFieldDefaultCharMax)

textFieldDefaultCharMax.placeholder = "Enter up to 50 characters"
textFieldDefaultCharMax.delegate = self

// Second the controller is created to manage the text field
textFieldControllerDefaultCharMax = MDCTextInputControllerDefault(input: textFieldDefaultCharMax) // Hold on as a property
textFieldControllerDefaultCharMax.characterCountMax = 50
textFieldControllerDefaultCharMax.isFloatingEnabled = false

Objective-C

// First the text field component is setup just like a UITextField
MDCTextField *textFieldDefaultCharMax = [[MDCTextField alloc] init];
[self.scrollView addSubview:textFieldDefaultCharMax];

textFieldDefaultCharMax.placeholder = @"Enter up to 50 characters";
textFieldDefaultCharMax.delegate = self;

// Second the controller is created to manage the text field
self.textFieldControllerDefaultCharMax = [[MDCTextInputControllerDefault alloc] initWithTextInput: textFieldDefaultCharMax];
self.textFieldControllerDefaultCharMax.characterCountMax = 50;
self.textFieldControllerDefaultCharMax.floatingEnabled = NO;

Examples - Multi Line

Text Field with Floating Placeholder

Swift

let textFieldFloating = MDCMultilineTextField()
scrollView.addSubview(textFieldFloating)

textFieldFloating.placeholder = "Full Name"
textFieldFloating.delegate = self

textFieldControllerFloating = MDCTextInputControllerDefault(input: textFieldFloating) // Hold on as a property

Objective-C

MDCMultilineTextField *textFieldFloating = [[MDCMultilineTextField alloc] init];
[self.scrollView addSubview:textFieldFloating];

textFieldFloating.placeholder = @"Full Name";
textFieldFloating.delegate = self;

self.textFieldControllerFloating = [[MDCTextInputControllerDefault alloc] initWithTextInput:textFieldFloating];

Text Field with Character Count and Inline Placeholder

Swift

// First the text field component is setup just like a UITextField
let textFieldDefaultCharMax = MDCMultilineTextField()
scrollView.addSubview(textFieldDefaultCharMax)

textFieldDefaultCharMax.placeholder = "Enter up to 50 characters"
textFieldDefaultCharMax.delegate = self

// Second the controller is created to manage the text field
textFieldControllerDefaultCharMax = MDCTextInputControllerDefault(input: textFieldDefaultCharMax) // Hold on as a property
textFieldControllerDefaultCharMax.characterCountMax = 50
textFieldControllerDefaultCharMax.isFloatingEnabled = false

Objective-C

// First the text field component is setup just like a UITextField
MDCMultilineTextField *textFieldDefaultCharMax = [[MDCMultilineTextField alloc] init];
[self.scrollView addSubview:textFieldDefaultCharMax];

textFieldDefaultCharMax.placeholder = @"Enter up to 50 characters";
textFieldDefaultCharMax.delegate = self;

// Second the controller is created to manage the text field
self.textFieldControllerDefaultCharMax = [[MDCTextInputControllerDefault alloc] initWithTextInput: textFieldDefaultCharMax];
self.textFieldControllerDefaultCharMax.characterCountMax = 50;
self.textFieldControllerDefaultCharMax.floatingEnabled = NO;