Utilice -[NSTextView setSelectedTextAttributes:...]
.
Por ejemplo:
[textView setSelectedTextAttributes:
[NSDictionary dictionaryWithObjectsAndKeys:
[NSColor blackColor], NSBackgroundColorAttributeName,
[NSColor whiteColor], NSForegroundColorAttributeName,
nil]];
Usted puede simplemente pasar un diccionario vacío si no desea que la selección se indica de ninguna manera en absoluto (por debajo de ocultar el punto de inserción).
Otra opción es observar los cambios de selección y aplicar la "selección" usando temporary attributes. Tenga en cuenta que los atributos temporales se utilizan para mostrar errores ortográficos y gramaticales y encontrar resultados; así que si te importa preservar estas características de NSTextView, asegúrate de agregar y eliminar atributos temporales, no de reemplazarlos.
Un ejemplo de esto es (en una subclase NSTextView):
- (void)setSelectedRanges:(NSArray *)ranges affinity:(NSSelectionAffinity)affinity stillSelecting:(BOOL)stillSelectingFlag;
{
NSArray *oldRanges = [self selectedRanges];
for (NSValue *v in oldRanges) {
NSRange oldRange = [v rangeValue];
if (oldRange.length > 0)
[[self layoutManager] removeTemporaryAttribute:NSBackgroundColorAttributeName forCharacterRange:oldRange];
}
for (NSValue *v in ranges) {
NSRange range = [v rangeValue];
if (range.length > 0)
[[self layoutManager] addTemporaryAttributes:[NSDictionary dictionaryWithObject:[NSColor blueColor] forKey:NSBackgroundColorAttributeName]
forCharacterRange:range];
}
[super setSelectedRanges:ranges affinity:affinity stillSelecting:stillSelectingFlag];
}
Al establecer el color de fondo a clearColor, lo más destacado funciona sólo después de toda la selección sea completa. ¿Cómo puedo aplicar estos atributos ya que la selección está en curso? – DexterW
Las notificaciones no se entregan hasta que se suelta el botón del mouse (es decir, ya no está 'stillSelecting'). Si desea manejar las selecciones en progreso, debe crear una subclase de NSTextView (editó mi respuesta para proporcionar algún código de muestra). –