web-dev-qa-db-fra.com

Comment utiliser NSIndexSet

Dans Objective-C, mon programme ouvre une fenêtre et affiche un tableau. Je souhaite mettre en surbrillance une ligne spécifiée du tableau.

Comment puis-je faire cela?

J'ai l'air d'avoir besoin du code

[myTableView selectRowIndexes:(NSIndexSet *) byExtendingSelection:(BOOL)];

J'ai regardé la documentation du développeur et j'ai compris que le BOOL devait être NON.

En regardant les documents NSIndexSet, je ne peux pas comprendre quelle devrait être la bonne syntaxe.

29
hertopnerd

ce serait la bonne façon:

NSIndexSet *indexSet = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, 3)];

ou vous pouvez utiliser le NSMutableIndexSet pour les index aléatoires:

NSMutableIndexSet *mutableIndexSet = [[NSMutableIndexSet alloc] init];
[mutableIndexSet addIndex:0];
[mutableIndexSet addIndex:2];
[mutableIndexSet addIndex:9];

etc.

74
holex

L'impression d'un NSIndexSet dans le débogueur vous montrera qu'ils sont en interne NSRanges. Pour en créer un, vous pouvez spécifier la plage ou un seul index explicite (à partir duquel il créera la plage); quelque chose comme

NSIndexSet *indexes = [[NSIndexSet alloc] initWithIndex:rowToHighlight];
[myTableView selectRowIndexes:indexes byExtendingSelection:NO];
[indexes release];

Notez que les index doivent tous être des entiers non signés (NSUIntegers, en particulier).

5
Richard

J'utiliserais une méthode d'usine pour éviter d'avoir à gérer la mémoire:

[myTableView selectRowIndexes:[NSIndexSet indexSetWithIndex:indexes] 
         byExtendingSelection:NO];
4
Paul Schreiber

J'ai l'air d'avoir besoin du code

[myTableView selectRowIndexes:(NSIndexSet *) byExtendingSelection:(BOOL)];

Non; ce sont des castings sans rien à lancer, ce qui n'est pas valide.

Supprimez les modèles et placez-y des valeurs à la place.

J'ai regardé la documentation du développeur et j'ai compris que le BOOL devait être NO.

Oui, car vous ne voulez pas étendre la sélection, vous voulez la remplacer.

En regardant les documents NSIndexSet, je ne peux pas comprendre quelle devrait être la bonne syntaxe.

Identique à la transmission de toute autre variable ou expression de message.

Vous devez créer un ensemble d'index, puis le stocker dans une variable et le transmettre ou transmettre directement le résultat du message de création.

0
Peter Hosey