Uno de mis proyectos es una aplicación de prueba en la que un alumno no debería poder buscar fácilmente las palabras mientras escribe.cómo deshabilitar la funcionalidad LookUp (Dictionary, Thesaurus, Wikipedia) dentro de un NSTextView?
Es relativamente fácil desactivar la verificación ortográfica automática en un NSTextView a través de setContinuousSpellCheckingEnabled:
y setAutomaticSpellingCorrectionEnabled:
.
Acabo de descubrir que es muy trivial para los estudiantes simply tap with three fingers upon any selected word en cualquier aplicación y hasta aparece una ventana útil que contiene un diccionario, tesauro e incluso una entrada de Wikipedia si la palabra se puede encontrar allí.
Ésta es una gran funcionalidad para el 99% de las aplicaciones de MacOS, pero no es apropiado para mi aplicación de prueba.
Ahora, después de unos meses, Apple me ha proporcionado una solución (no documentada y sutil) que trabaja el 10,8 única y puede que finalmente proporcionarlo en las respuestas abajo, pero necesita tener una solución que funciona para 10.7 también (que es donde entró esta funcionalidad).
Hay tres posibles planes de ataque contra este problema, pero no estoy seguro de cómo acercarse a cualquiera de estos tres:
1)
necesito para bloquear esta funcionalidad de búsqueda suceda en este texto ver.
2)
ya he intentado eliminar las preferencias del diccionario (si es que existen, y si el usuario nunca se abrió Dictionary.app, no hay preferencias) y los archivos de caché (en el diccionario "~/Library/Cache
", pero esto no parece mejorar la situación.
3)
O hay una manera de ser capaz de detectar la configuración del trackpad que dice "uso de búsqueda cuando se hace un grifo de tres dedos"? Es probable que esté en algún punto de com.apple * en algún lugar o detectable a través de "defaults
", pero no estoy seguro de dónde.
EDIT:
Sólo un poco de tiempo para resolver este problema es de esperar y adjudicar una recompensa. Aquí es el enfoque que yo estaba tratando con "defaults
":
defaults write com.apple.driver.AppleBluetoothMultitouch.trackpad TrackpadThreeFingerTapGesture -bool false
defaults write com.apple.driver.AppleBluetoothMultitouch.trackpad TrackpadThreeFingerDoubleTapGesture -bool false
, pero no estoy 100% seguro de que estos son los gestos correctos/palabras clave para escribir y aún después de escribir en ellos (y verificar que eran. guardado correctamente a través de "defaults read com.apple.driver.AppleBluetoothMultitouch.trackpad
"), la ventana de búsqueda del diccionario aún aparece.
Ahora aquí está el único que funciona, pero funciona solo bajo MacOS 10.8 (que es donde se expusieron/introdujeron estos métodos). Simplemente anular estos dos métodos en la subclase NSTextView:
- (void)quickLookWithEvent:(NSEvent *)event;
- (void)quickLookPreviewItems:(id)sender;
Reemplazando "' validRequestorForSendType: returnType: ' "no tocó puntos de interrupción o NSLogs al hacer un toque de tres dedos. Pero el siguiente párrafo - reemplazando "' attributeSubstringForProposedRange: '" & "' attribuString' "ambos golpean al hacer una búsqueda TFT. Si la primera llamada falla, entonces "' attributedString' "es el método alternativo al que se llama. Devuelve NULL para ambos resultados en una "' NSInternalInconsistencyException' "lanzada desde" 'LUTSMDocumentTextAccessAccessor'", pero la aplicación continúa sin fallas o con un comportamiento incorrecto posterior. Esto parece * muy * prometedor, Ken. Me pregunto cuál es el inconveniente? –
Las únicas desventajas que puedo pensar son: A) hay una excepción que se lanza y, generalmente, cuando se lanzan excepciones, se produce un bloqueo posterior ... a menos que algo lo atrape. Tal vez haya algún lugar en la arquitectura de búsqueda que lo esté captando. B) Probé todo el texto y la capacidad de formato limitada que pongo a disposición de los usuarios de mi aplicación, y no pude ver los dos métodos de '' attributed String' llamados para nada aparte de la búsqueda con tres dedos. Espero que no esté desactivando accidentalmente algo en la aplicación devolviendo NULL de esos dos métodos. –
¿Es la excepción de su proceso? Los métodos en cuestión tienen que ver con los métodos de entrada, que en realidad se ejecutan en un proceso separado. Puede intentar anular algunos de los otros métodos 'NSTextInputClient' para ver si puede convencer a la mensajería instantánea de búsqueda del diccionario de que ni siquiera espera que pueda obtener una cadena. Otro pensamiento, puede anular '- [NSView inputContext]' para devolver 'nil' para deshabilitar IMs por completo. En cuanto a las desventajas, ¿has probado los mensajes instantáneos asiáticos? ¿Has intentado presionar y mantener la entrada de caracteres acentuados? Los mensajes instantáneos como esos son lo que esperaría que se rompieran. –