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

Était-ce utile?

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

entrer image description ici

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: entrer image description ici

Vous opterais les attributs comme suit:

entrer image description ici

entrer image description ici

entrer image description ici

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;
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top