Seleccione texto (contenido) en lugar de celda con nscell
-
24-10-2019 - |
Pregunta
Actualmente estoy trabajando en un proyecto con un NsoutLineView ...
Utilizo, por supuesto, NSCell (s) y necesito dejar que la capacidad de seleccionar texto dentro de la celda ... o al menos ... Evite la selección (y resalte) de las celdas ...
Busco todas las opciones en IB, pero no puedo encontrar la correcta ...
¿Hay alguna manera, programáticamente o no, para evitar la selección/resaltado de la celda, ni dejar que el usuario seleccione el contenido de la celda?
Gracias =)
Solución
Eso no está muy relacionado con Nscell, tal vez estás buscando implementar outlineView:shouldSelectItem:
en tu delegado.
En el nscell, setEnabled:NO
, también puede ayudar. De la documentación:
setEnabled:(BOOL)flag
El texto de las celdas deshabilitadas se cambia a gris. Si una celda está deshabilitada, no se puede resaltar, no admite el seguimiento del mouse (y, por lo tanto, no puede participar en la funcionalidad objetivo/de acción) y no se puede editar. Sin embargo, aún puede alterar muchos atributos de una celda deshabilitada programáticamente. (El método SetState: por ejemplo, todavía funciona).
Otros consejos
Intenta configurar:
cell.selectionStyle = UITableViewCellSelectionStyleNone;
También puede intentar anular destacar la selección de inliPrect:, pero no estoy totalmente seguro de que esto funcione.
Tomemos un ejemplo rápido como la vista de esquema a continuación. Hay 3 columnas: firstName
, lastName
, y fullName
.
En este ejemplo en particular, digamos que solo queremos permitir firstName
y lastName
ser editable mientras fullName
(que se deriva potencialmente de firstName
y lastName
) no es. Puede configurar esto en Interface Builder verificando o desactivando la casilla de verificación editable para la columna de la tabla. Para hacer eso, haga clic 3 veces en una de las columnas de la tabla (no en el encabezado, sino dentro de la vista del contorno); Esto primero selecciona el NSScrollView
, entonces el NSOutlineView
, entonces un NSTableColumn
:
Establecería los atributos como los siguientes:
Eso proporciona un inicio estableciendo un valor editable predeterminado para toda la columna. Si necesita más control sobre si el valor del elemento de una fila en particular debe ser editable o no, puede usar el outlineView:shouldEditTableColumn:item:
Método delegado:
#pragma mark -
#pragma mark <NSOutlineViewDelegate>
- (BOOL)outlineView:(NSOutlineView *)anOutlineView
shouldEditTableColumn:(NSTableColumn *)tableColumn
item:(id)item {
if ([[tableColumn identifier] isEqualToString:@"firstName"] ||
[[tableColumn identifier] isEqualToString:@"lastName"]) {
return YES;
} else if ([[tableColumn identifier] isEqualToString:@"fullName"]) {
return NO;
}
return YES;
}
Si desea controlar si una fila particular en la vista de esquema es seleccionable (por ejemplo, puede evitar la selección de un elemento de grupo), puede usar outlineView:shouldSelectItem:
.
- (BOOL)outlineView:(NSOutlineView *)anOutlineView shouldSelectItem:(id)item {
// if self knows whether it should be selected
// call its fictional isItemSelectable:method:
if ([self isItemSelectable:item]) {
return YES;
}
/* if the item itself knows know whether it should be selectable
call the item's fictional isSelectable method. Here we
are assuming that all items are of a fictional
MDModelItem class and we cast `item` to (MDModelItem *)
to prevent compiler warning */
if ([(MDModelItem *)item isSelectable]) {
return YES;
}
return NO;
}