Sélectionnez le texte (contenu) à la place de la cellule avec NSCell
-
24-10-2019 - |
Question
Je travaille actuellement dans un projet avec un NSOutlineView ...
J'utilise, bien sûr, NSCell (s) et je dois laisser la possibilité de sélectionner le texte dans la cellule ... Ou au moins ... empêcher la sélection (et mettez en valeur) des cellules ...
Je recherche toutes les options sur IB, mais ne peut pas trouver la bonne ...
Est-il possible, par programme ou non, afin d'éviter la sélection / mise en évidence des cellules, ni laisser le contenu cellulaire sélectionnez utilisateur?
Merci =)
La solution
Ce n'est pas beaucoup NSCell lié, peut-être que vous cherchez à mettre en œuvre outlineView:shouldSelectItem:
dans votre délégué.
Sur la NSCell, setEnabled:NO
, peut aider aussi. De la documentation:
setEnabled:(BOOL)flag
Le texte des cellules handicapées est changé en gris. Si une cellule est désactivé, il ne peut pas être mis en évidence, ne prend pas en charge le suivi de la souris (et ne peut donc pas participer à la cible / fonctionnalité d'action), et ne peut être modifié. Cependant, vous pouvez toujours modifier de nombreux attributs d'un programme cellulaire désactivé. (Le setState:. Méthode, par exemple, fonctionne encore)
Autres conseils
Essayez de régler:
cell.selectionStyle = UITableViewCellSelectionStyleNone;
Vous pouvez également essayer primordial highlightSelectionInClipRect :, mais je ne suis pas tout à fait sûr que cela fonctionnera.
Prenons un exemple rapide comme la vue de plan ci-dessous. Il y a 3 colonnes:. firstName
, lastName
et fullName
Dans cet exemple, disons que nous voulons seulement permettre firstName
et lastName
d'être modifiable en fullName
(qui est potentiellement dérivé de firstName
et lastName
) n'est pas. Vous pouvez configurer cela dans Interface Builder en cochant ou décochant la case modifiable pour la colonne de table. Pour ce faire, cliquez 3 fois sur l'une des colonnes de la table (pas l'en-tête, mais à l'intérieur de la vue de plan); ce premier sélectionne le NSScrollView
, le NSOutlineView
, puis un NSTableColumn
:
Vous opterais les attributs comme suit:
qui fournit un début en définissant une valeur modifiable par défaut de la colonne entière. Si vous avez besoin de plus de contrôler si une valeur de l'élément de ligne particulière doit être modifiable ou non, vous pouvez utiliser la méthode délégué outlineView:shouldEditTableColumn:item:
:
#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 vous voulez contrôler si une ligne particulière dans la vue de contour peut être sélectionné (par exemple, vous pouvez empêcher la sélection d'un élément de groupe), vous pouvez utiliser 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;
}