Uno dei miei progetti è un'applicazione di test in cui uno studente non dovrebbe essere in grado di cercare facilmente le parole mentre stanno digitando.come disattivare la funzionalità LookUp (Dictionary, Thesaurus, Wikipedia) all'interno di un NSTextView?
È relativamente semplice disattivare il controllo ortografico automatico in NSTextView tramite setContinuousSpellCheckingEnabled:
e setAutomaticSpellingCorrectionEnabled:
.
Ho appena scoperto che è molto banale per gli studenti per simply tap with three fingers upon any selected word in qualsiasi app e su pop una finestra utile contenente un dizionario, thesaurus e anche una voce di Wikipedia se la parola può essere trovata lì.
Questo è grande funzionalità per il 99% delle applicazioni MacOS, ma non è appropriato per il mio test app.
Ora, dopo un paio di mesi, Apple ha mi ha fornito una soluzione (non documentato e sottile) che lavora per 10,8 solo e posso eventualmente fornire nelle risposte in basso, ma io bisogno di di avere una soluzione che funziona anche per 10.7 (che è dove questa funzionalità è arrivata).
Ci sono tre possibili piani di attacco su questo problema, ma non sono sicuro come affrontare uno di questi tre:
1)
ho bisogno di bloccare questa funzionalità di ricerca accada in questo testo vista.
2)
ho già cercato di eliminare le preferenze del dizionario (se esistono, se l'utente non ha aperto Dictionary.app, non ci sono le preferenze) ei file dizionario cache (in "~/Library/Cache
", ma questo non sembra migliorare la situazione.
3)
O c'è un modo per essere in grado di rilevare l'impostazione trackpad che dice "Usa Lookup quando si fa un tre tap dita"? Probabilmente è in qualche com.apple. *. Plist da qualche parte o rilevabile tramite "defaults
" ma non sono sicuro di dove.
EDIT:
Solo un po 'di tempo a disposizione per risolvere questo problema e speriamo premio una taglia. Qui è l'approccio che stavo cercando con "defaults
":
defaults write com.apple.driver.AppleBluetoothMultitouch.trackpad TrackpadThreeFingerTapGesture -bool false
defaults write com.apple.driver.AppleBluetoothMultitouch.trackpad TrackpadThreeFingerDoubleTapGesture -bool false
Ma io non sono sicuro al 100% questi sono i corretti gesti/parole chiave per digitare e anche dopo di loro digitando (e la verifica che erano. salvato correttamente tramite "defaults read com.apple.driver.AppleBluetoothMultitouch.trackpad
"), viene visualizzata la finestra di ricerca del dizionario.
Ora questa è la unica cosa che funziona, ma funziona solo con MacOS 10.8 (che è dove questi metodi sono stati esposti/portati). Basta ignorare questi due metodi nella sottoclasse NSTextView:
- (void)quickLookWithEvent:(NSEvent *)event;
- (void)quickLookPreviewItems:(id)sender;
Override "' validRequestorForSendType: returnType: ' "non ha colpito punti di interruzione o NSLogs quando si fa un tocco a tre dita. Ma il paragrafo seguente - sovrascrivendo "' attributeSubstringForProposedRange: '" e "' attributeString' "colpiscono entrambi quando fanno una ricerca TFT. Se la prima chiamata fallisce, allora "' attributeString' "è il metodo di fallback che viene chiamato. Restituendo NULL per entrambi i risultati in un "' NSInternalInconsistencyException' "generato da" 'LUTSMDocumentTextAccessor'", ma l'app continua senza arresti anomali o comportamenti indesiderati successivi. Questo sembra * molto * promettente, Ken. Mi chiedo quale sia il rovescio della medaglia? –
Gli unici svantaggi che posso pensare sono A) c'è un'eccezione generata e di solito quando vengono lanciate le eccezioni, c'è un crash successivo ... a meno che qualcosa non lo catturi. Forse c'è un posto nell'architettura della ricerca che lo sta catturando? B) Ho testato tutto il testo e le capacità di formattazione limitate che ho messo a disposizione degli utenti della mia app e non sono riuscito a vedere i due metodi "' attributeString' "richiamati per nulla oltre alla ricerca di tre dita toccate. Spero di non disabilitare per errore qualcosa nell'app restituendo NULL da questi due metodi. –
È l'eccezione dal tuo processo? I metodi in questione hanno a che fare con i metodi di input, che in realtà vengono eseguiti in un processo separato. Puoi provare a sovrascrivere alcuni degli altri metodi 'NSTextInputClient' per vedere se riesci a convincere l'IM di ricerca dizionario a non aspettarti nemmeno che possa ottenere una stringa. Un altro pensiero, è possibile sovrascrivere '- [NSView inputContext]' per restituire 'nil' per disabilitare completamente i messaggi istantanei. Per quanto riguarda i lati negativi, hai provato IMs asiatici? Hai provato a premere e tenere premuto l'inserimento di caratteri accentati? IM come quelli sono quelli che mi aspetterei possano rompere. –