Override pasta: per formattare il testo
-
22-09-2019 - |
Domanda
Vorrei catturare una stringa di essere incollato in un controllo e applicare un po 'di formattazione personalizzata alla stringa prima di essere incollato.
Come è possibile questo?
Grazie!
Soluzione
Override paste:
nella visualizzazione / controllo (pasta: fa parte del UIResponderStandardEditActions
protocollo informale). Al più semplice, devi fare questo:
- (void)paste:(id)sender
{
UIPasteboard* pasteboard = [UIPasteboard generalPasteboard];
NSString* rawString = pasteboard.string;
NSString* formattedString = // do something fun with rawString here
pasteboard.string = formattedString;
[super paste:sender];
}
Questo è supponendo che non è necessario fare qualcosa di terribilmente fantasia con la stringa (come l'inserimento faccine animate o qualcosa del genere), nel qual caso non si dovrebbe chiamare super
ma fare l'inserimento da soli (se si sta facendo questo su un UITextView
è possibile utilizzare la proprietà selectedRange
di fare l'inserimento corretto).
EDIT: Per ottenere i dati da un NSPasteBoard
si dovrebbe usare –stringForType:
o uno dei molti altri metodi di accesso ai dati . Potrebbe essere necessario validare la stringa / dati per assicurarsi che sia qualcosa che può essere incollato.
Probabilmente non dovrebbe chiamare super
ma usare
[self insertText:formattedString];
se stai facendo questo su un NSTextView. Se si sta lavorando con un'altra classe si deve scoprire che cosa è appropriato in questo contesto.