Soporte a teclados externos en app iOS

27 de enero de 2010, Steve Jobs sube al escenario del Yerba Buena Center for the Arts de San Francisco para presentar la primera generación de un nuevo dispositivo, el iPad. Desde entonces ha tenido gran importancia dentro del ecosistema de Apple, habiendo sufrido importantes cambios tanto en tamaño como en características técnicas. Ha llegado a competir de tu a tu contra PC y Mac en algunos casos.

Cada generación de iPad venía acompañada de accesorios, entre ellos un teclado. Todos los modelos, incluyendo el original, son compatibles con teclados bluetooth. Aunque no ha sido hasta estas últimas generaciones en las que iPad con teclado se convierte en una herramienta de trabajo, gracias al potente hardware y a las sucesivas mejoras en iOS.

Desde el punto de vista de desarrollo, añadir soporte a tu applicación para teclados externos/bluetooth es sencillo. Para ello usaremos las APIs de UIResponder.

Trabajando con UIResponder

Los objectos responder, que son instancias de UIResponder, constituyen la columna vertebral del manejo de eventos en UIKit. Las principales clases dentro de UIKit tales como UIApplication, UIViewController y UIView son tambien objetos responder. A medida que un evento ocurre, UIKit lo envia a los responder de la app para que lo traten.

En concreto, dentro de la variada API de UIResponder, para dar soporte a teclados externos nos interesa la variable var keyCommands: [UIKeyCommand]?, la cual representa los comandos de teclas que ejectutan una acción en ese UIResponder.

Cuando ocurre una combinación de teclas que encaja con un keyCommand, UIKit busca por la cadena de responders un objeto que encaje con esa combinación, después, llama al primer objeto que encuentra y para el procesamiento del evento.

Para crear un UIKeyCommand utilizaremos el inicializador init(input: String, modifierFlags: UIKeyModifierFlags, action: Selector), siendo:

  • input: Identificador la tecla presionada.
  • modifierFlags: Teclas modificadoras tales como Shift, control…
  • action: Función a ejecutar
override var keyCommands: [UIKeyCommand]? {
		
	    let deleteInputKey: String = "\u{8}"
		        
        var keyCommands: [UIKeyCommand] = []
        
        keyCommands.append(
            UIKeyCommand(input: "\u{8}",
                         modifierFlags: [],
                         action: #selector(deleteKeyPressed),
                         discoverabilityTitle: "Delete")
        )
        
        
         keyCommands.append(          
             UIKeyCommand(input: UIKeyCommand.inputEscape,
                          modifierFlags: [],
                          action: #selector(escapeKeyPressed),
                          discoverabilityTitle: "Cancel")
         )
        
        
        return keyCommands
    }
UIResponder iOS keyboard

La API de UIKeyCommand es muy variada y sencilla a la vez. Permite de manera rápida añadir incluso atajos de teclado:

override var keyCommands: [UIKeyCommand]? {
	var keyCommands: [UIKeyCommand] = []
	
	// Comando + Escape
	keyCommands.append(
		UIKeyCommand(input: UIKeyCommand.inputEscape",
		modifierFlags: [.command],
   		action: #selector(deleteKeyPressed),
		discoverabilityTitle: "Command + Escape")
	)
		
	return keyCommands
}

Si bien esta API es bastante potente y sencilla, tiene limitaciones. Por ejemplo, saber cuando el usuario suelta una tecla. Espero que habiendo mostrado lo facil que es añadir soporte para teclados externos en iOS, cada vez más aplicaciones se animen a soportarlo.

Acerca de Siro Ramírez

FullStack Developer at SolidGEAR. Intern-CEO at Namekian Team, part-time geek. Love to make magic with software. Passionate about Agile methodologies and videogames development.
Subscribe to our Youtube channel: https://www.youtube.com/channel/UC2B2dxYzZHngPMIHuEOSfXg

Deja un comentario

Responsable » Solidgear.
Finalidad » Gestionar los comentarios.
Legitimación » Tu consentimiento.
Destinatarios » Los datos que me facilitas estarán ubicados en los servidores SolidgearGroup dentro de la UE.
Derechos » Podrás ejercer tus derechos, entre otros, a acceder, rectificar, limitar y suprimir tus datos.

Envíando este formulario aceptas la política de privacidad.

¿Necesitas una estimación?

Calcula ahora