Trabajar con la entrada de texto de watchOS en Xamarin

Apple Watch no proporciona un teclado para que los usuarios escriban texto, pero admite algunas alternativas compatible con el reloj:

  • Seleccionar una lista predefinida de opciones de texto
  • Dictado de Siri
  • Elegir un emoji
  • Reconocimiento de escritura a mano letra por letra (introducido en watchOS 3).

El simulador no admite actualmente el dictado, pero puede igualmente probar las demás opciones del controlador de entrada de texto, como dibujo directo, como se muestra aquí:

Testing the scribble option

Para aceptar la entrada de texto en una aplicación del reloj:

  1. Cree una matriz de cadenas de opciones predefinidas.
  2. Llame a PresentTextInputController con la matriz, tanto si quiere permitir emojis como si no y un objeto Action al que se llama cuando finaliza el usuario.
  3. En la acción de finalización, pruebe el resultado de entrada y realice las acciones adecuadas en la aplicación (posiblemente estableciendo el valor de texto de una etiqueta).

El siguiente fragmento de código presenta tres opciones predefinidas para el usuario:

var suggest = new string[] {"Get groceries", "Buy gas", "Post letter"};

PresentTextInputController (suggest, WatchKit.WKTextInputMode.AllowEmoji, (result) => {
    // action when the "text input" is complete
    if (result != null && result.Count > 0) {
    // this only works if result is a text response (Plain or AllowEmoji)
        enteredText = result.GetItem<NSObject>(0).ToString();
        Console.WriteLine (enteredText);
        // do something, such as myLabel.SetText(enteredText);
    }
});

La enumeración WKTextInputMode tiene tres valores:

  • Normal
  • AllowEmoji
  • AllowAnimatedEmoji

Normal

Cuando se establece el modo sin formato, el usuario puede elegir:

  • Dictado
  • Dibujo directo
  • Escoger de una lista predefinida que proporciona la aplicación.

Dictation, Scribble, or from a pre-defined list that the app supplies

El resultado siempre se devuelve como NSObject que se puede convertir en string.

Emoji

Hay dos tipos de emoji:

  • Emoji Unicode normal
  • Imágenes animadas

Cuando el usuario elige un emoji Unicode, se devuelve como una cadena.

Si se selecciona un emoji de imagen animada, el result en el controlador de finalización contendrá un objeto NSData que contiene el emoji UIImage.

Aceptar solo dictado

Para llevar al usuario directamente a la pantalla de dictado sin mostrar sugerencias (o la opción de dibujo directo):

  • pase una matriz vacía para la lista de sugerencias y
  • establezca WatchKit.WKTextInputMode.Plain.
PresentTextInputController (new string[0], WatchKit.WKTextInputMode.Plain, (result) => {
    // action when the "text input" is complete
    if (result != null && result.Count > 0) {
        dictatedText = result.GetItem<NSObject>(0).ToString();
        Console.WriteLine (dictatedText);
        // do something, such as myLabel.SetText(dictatedText);
    }
});

Cuando el usuario habla, la pantalla del reloj muestra la siguiente pantalla que incluye el texto tal como se entiende (por ejemplo, "Esta es una prueba"):

When the user is speaking, the watch screen displays the text as it is understood

Una vez que el usuario presione el botón Listo, se devolverá el texto.