Selezionare il testo (contenuto), invece di cella con NSCell
-
24-10-2019 - |
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 =)
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
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
:
quando si imposta gli attributi come il seguente:
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;
}