Domanda

Al momento sto lavorando a un progetto con una NSOutlineView ...

Io uso, ovviamente, NSCell (s) e ho bisogno di lasciare la possibilità di selezionare il testo all'interno della cella ... O almeno ... impedire la selezione (e evidenziare) delle cellule ...

I cercare tutte le opzioni su IB, ma non riesce a trovare quella giusta ...

C'è un modo, a livello di codice o no, per evitare che la selezione / evidenziazione della cella, né lascerai che il contenuto delle celle selezionate utente?

Grazie =)

È stato utile?

Soluzione

Quello non è molto NSCell relativi, forse stai cercando di attuare outlineView:shouldSelectItem: nel vostro delegato.

Al NSCell, setEnabled:NO, può aiutare anche. Dalla documentazione:

setEnabled:(BOOL)flag

Il testo delle cellule con disabilità viene modificato in grigio. Se una cella è disabilitato, non può essere evidenziato, non supporta il monitoraggio del mouse (e quindi non può partecipare alla funzionalità target / azione), e non può essere modificato. Tuttavia, è ancora possibile modificare molti attributi di una cella disabilitato a livello di codice. (Il setState:. Metodo, per esempio, funziona ancora)

Altri suggerimenti

Prova impostazione:

cell.selectionStyle = UITableViewCellSelectionStyleNone;

Si potrebbe anche provare l'override highlightSelectionInClipRect :, ma non sono del tutto sicuro che questo funzionerà.

Facciamo un esempio veloce come la vista struttura sottostante. Ci sono 3 colonne:. firstName, lastName, e fullName

entrare descrizione dell'immagine qui

In questo particolare esempio, diciamo che vogliamo consentire solo firstName e lastName di essere modificabile, mentre fullName (che è potenzialmente deriva da firstName e lastName) non lo è. È possibile impostare questa funzione in Interface Builder selezionando o deselezionando la casella modificabile per la colonna della tabella. Per fare questo, cliccare 3 volte su una delle colonne della tabella (non l'intestazione, ma dentro la vista struttura); questa prima seleziona il NSScrollView, poi il NSOutlineView, poi un NSTableColumn: entrare descrizione dell'immagine qui

quando si imposta gli attributi come il seguente:

entrare descrizione dell'immagine qui

entrare descrizione dell'immagine qui

entrare descrizione dell'immagine qui

che fornisce un inizio impostando un valore modificabile predefinito per l'intera colonna. Se avete bisogno di un maggiore controllo sul se il valore oggetto di una particolare riga dovrebbe essere modificabile o meno, è possibile utilizzare il metodo outlineView:shouldEditTableColumn:item: delegato:

#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;
}

Se si desidera controllare se un particolare riga nella vista struttura è selezionabile (ad esempio, si potrebbe impedire la selezione di una voce di gruppo), è possibile utilizzare 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;
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top