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 =)

¿Fue útil?

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.

enter image description here

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: enter image description here

Establecería los atributos como los siguientes:

enter image description here

enter image description here

enter image description here

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;
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top