teclas teclado rapido para mac comandos arranque acceso objective-c ios keyboard

objective c - rapido - Soporte de comando, control y teclas de flecha cuando se conecta un teclado externo



teclas de acceso rapido windows (2)

Tengo una aplicación iOS donde todo lo que quiero hacer es proporcionar más soporte para combinaciones de teclas de comando básicas como comando + a, comando + s, comando + x, comando + v y amigos cuando un usuario ha conectado un teclado bluetooth.

Sé que esto es posible. Las aplicaciones como Textastic y muchas otras aplicaciones de edición son compatibles con estas características.

He examinado UIResponder (que parece que solo se utiliza en el menú emergente), UIKeyInput, UITextInput [Delegate] y otros documentos de API sin referencia a cómo hacerlo.

Es fácil admitir qué opciones se muestran en el UIMenuController utilizando (BOOL) canPerformAction: (SEL) acción con el remitente: (id) remitente. Sin embargo, este método no parece ser llamado cuando se conecta un teclado bluetooth. Entonces, o necesito implementar otro método específicamente para el teclado u otra cosa.

Ahora sospecho que podría ser que el subsistema de texto sea responsable de realizar las acciones. Sin embargo, ¡no hay documentación que pueda encontrar! Además, ninguno de los métodos delegados UITextInput se invoca cuando se realiza una operación. Casi estoy pensando que la solución es privada y que debo preguntarle específicamente a Apple cómo obtener acceso a estas funciones (que acabo de hacer).

ACTUALIZAR:

positionFromPosition: inDirection: offset: es el método que se utiliza para detectar cuándo se presiona la tecla de flecha. Después de que iOS ha llamado a este método, llama a setSelectedText :. Necesitarás calcular el resto de la tubería.

ACTUALIZACIÓN 2:

Pude responder todas las preguntas que tenía. Por favor refiérase a la solución marcada para las respuestas.


Desafortunadamente, no hay ningún método para hacerlo con API públicas. Utilizo un teclado inalámbrico con mi ipad por ejemplo, así que lo he analizado antes. Sin embargo, podría implementar una solución si no le importa utilizar la tecla de opción en lugar de la tecla de comando.

Suponiendo que está haciendo un tipo de editor de texto de una aplicación, puede hacer esto: sondear cada carácter como está tipeado y compararlo con ciertos "caracteres de función especial" usando una declaración de cambio. Cuando un usuario escribe una tecla cuando la opción se mantiene presionada, se insertan caracteres especiales (como ",», ü, etc.). Simplemente encuentre los valores Unicode de estos caracteres y realice una acción específica cuando se presiona una de estas teclas. Además, observe cómo la función de cambio además de la tecla de opción genera un carácter diferente.


Lo averigué. Ya había implementado los métodos UIMenuController para admitir cortar, copiar y pegar. Al implementar estas funciones y conectar un teclado bluetooth a un dispositivo físico, obtendrá automáticamente las opciones de comando básicas (a, c, x, vy amigos). Necesita implementar completamente UIMenuController UIResponderStandardEditActions. Quiero señalar que en el simulador de iOS no activará acciones de comando (a, c, x, v y amigos). Pude observar que estas funciones funcionaban solo cuando se conectaba un teclado bluetooth a un dispositivo físico, aunque "Simulate Hardware Keyboard" se había habilitado en el simulador.

En cuanto a las teclas de control / opción; cuando implemente UITextInput completamente, también obtendrá toda la funcionalidad de movimiento cuando use las teclas de flecha, las teclas de flecha + control, las teclas de flecha + opción, etc. Consulte el archivo de código de ejemplo SimpleTextInput proporcionado por Apple para obtener una mejor idea sobre cómo implementar esto .

Dicho esto, no puedes crear tus propias combinaciones de teclado. Apple me pidió que creara un boleto si quería esas características, que no ... realmente no me interesa apoyar nada más de lo que han proporcionado. Por lo tanto, comandos como Command + s (guardar), etc. actualmente no son posibles.

Una pequeña y divertida historia para ti; Apple dijo que lo que quería hacer no era posible (usando comando + c, comando + v, etc.) con la API. Supongo que eso demuestra lo útil que es su experiencia técnica. Muy decepcionante

Actualizar:

Desde iOS 7, Apple ha hecho que sea trivial capturar cualquier comando clave, esc, etc. Aquí hay un ejemplo de cómo uno puede capturar una variedad de claves diferentes:

return @[[UIKeyCommand keyCommandWithInput:UIKeyInputEscape modifierFlags:0 action:@selector(escapeKeyPressed:)], [UIKeyCommand keyCommandWithInput:@"f" modifierFlags:UIKeyModifierCommand action:@selector(commandFindPressed:)], [UIKeyCommand keyCommandWithInput:@"s" modifierFlags:UIKeyModifierCommand action:@selector(commandSavePressed:)], [UIKeyCommand keyCommandWithInput:@"b" modifierFlags:UIKeyModifierControl action:@selector(controlBKeyPressed:)], [UIKeyCommand keyCommandWithInput:@"f" modifierFlags:UIKeyModifierControl action:@selector(controlFKeyPressed:)], [UIKeyCommand keyCommandWithInput:@"r" modifierFlags:UIKeyModifierControl action:@selector(controlRKeyPressed:)] ]; ... - (void)commandSavePressed:(UIKeyCommand *)keyCommand { [self saveFile]; }