Ho una sottoclasse NSTextView
che funge da delegato NSTextStorage
. Sto cercando di fare 2 cose:La modifica di NSTextStorage fa spostare il punto di inserimento alla fine della riga
- evidenziare il testo in qualche modo
- valutare il testo e quindi aggiungere la risposta alla TextView.
Lo sto facendo in due modi diversi, entrambi invocati dal callback del delegato - (void)textStorageWillProcessEditing:(NSNotification *)notification
.
Posso fare l'evidenziazione della sintassi bene, ma quando si tratta di aggiungere la mia risposta, il punto di inserimento salta alla fine della riga e non so davvero perché. Il mio metodo di valutazione è simile al seguente:
NSString *result = ..;
NSRange lineRange = [[textStorage string] lineRangeForRange:[self selectedRange]];
NSString *line = [[textStorage string] substringWithRange:lineRange];
line = [self appendResult:result toLine:line]; // appends the answer
[textStorage replaceCharactersInRange:lineRange withString:line];
Facendo che aggiungerà il mio risultato più che bene, ma il problema è, come detto, il punto di inserimento salta alla fine.
ho provato:
- Wrapping quelli di cui sopra si richiama in
[textStorage beginEditing]
e-endEditing
. - Salvare l'intervallo di selezione (cioè il punto di inserimento) prima di modificare l'archiviazione del testo in modo da poterlo reimpostare in seguito, ma senza dadi.
Sto facendo bene? Sto cercando di fare questo il modo meno ostico, e sono anche incerto se questo è il posto ideale per fare la mia analisi/evidenziazione. I documenti mi portano a crederci, ma forse è sbagliato.
Che cos'è lineForRange, non trovo questo metodo nei documenti? Se intendi lineRangeForRange, questo potrebbe essere il tuo problema. Stai cercando di aggiungere alla fine della riga o alla fine della selezione? – rdelmar
Sì, questo è un errore di battitura. – jbrennan
E la seconda parte della mia domanda? Non è chiaro dove stai cercando di aggiungere il tuo testo. Quando dici che il punto di inserimento si sposta alla fine della linea, intendi dopo l'inserimento o prima? – rdelmar