To create a custom keyboard, start by subclassing the UIInputViewController class. Add your keyboard’s user interface to the inputView property of your subclass.


Xcode 6 and later provides a starting point for a custom keyboard: the Custom Keyboard target template.

A custom keyboard can respond to user input events in the following ways:

Obtain textual context around the insertion point by reading the textDocumentProxy properties documentContextBeforeInput and documentContextAfterInput. To find out if the current text input object is empty, call the hasText method on the textDocumentProxy property. You can employ this textual context by considering it along with user input, to offer context-sensitive output to a document from your keyboard.

An input view controller conforms to the UITextInputDelegate protocol, allowing you to respond to changes in document content and position of the insertion point.

To present an appropriate keyboard layout, respond to the current text input object’s UIKeyboardType property. For each keyboard type trait you support, change the contents of your primary view accordingly.

For more about creating a custom keyboard, read Custom Keyboard in App Extension Programming Guide.


Providing a User Interface for a Custom Keyboard

var inputView: UIInputView?

The primary view for the input view controller.

Controlling a Custom Keyboard

func advanceToNextInputMode()

Switches to the next keyboard in the list of user-enabled keyboards.

func dismissKeyboard()

Dismisses the custom keyboard from from the screen.

Interacting with a Text Input Object

var textDocumentProxy: UITextDocumentProxy

A proxy to the text input object that the custom keyboard is interacting with.

Obtaining a Supplementary Lexicon

func requestSupplementaryLexicon(completion: (UILexicon) -> Void)

Obtains a supplementary lexicon of term pairs for use in a custom keyboard.

Changing the Primary Language of a Custom Keyboard

var primaryLanguage: String?

The primary language for a custom keyboard.