Comment définir l'image de l'indicateur sur la colonne avec plusieurs descripteurs de tri?
-
25-09-2019 - |
Question
NSDisableScreenUpdates();
[self.productsArrayController setFetchPredicate:predicate];
[self.productsArrayController setSortDescriptors:sortDescriptors];
[self.productsArrayController fetchWithRequest:[self.productsArrayController defaultFetchRequest] merge:YES error:nil];
NSSortDescriptor *lastSortDescriptor = [sortDescriptors lastObject];
[tableView setHighlightedTableColumn:[tableView tableColumnWithIdentifier:[lastSortDescriptor key]]];
[tableView setIndicatorImage:[NSImage imageNamed: ([lastSortDescriptor ascending]) ? @"NSAscendingSortIndicator" : @"NSDescendingSortIndicator"]
inTableColumn:[tableView tableColumnWithIdentifier:[lastSortDescriptor key]]];
NSLog(@"currentImage: %@", [tableView indicatorImageInTableColumn:[tableView tableColumnWithIdentifier:[lastSortDescriptor key]]]); /* DEBUG LOG */
NSEnableScreenUpdates();
code ci-dessus une image fixe pas de tri triangle. Je plusieurs descripteurs de tri mise, mais après avoir changé à un seul, il commence à afficher l'image correcte en-tête de colonne. Dans les deux cas, currentImage me montre que l'image correcte est définie (même pour l'ordre décroissant):
currentImage: <NSImage 0x200495fc0 Name=NSAscendingSortIndicator Size={9, 9} Reps=(
"NSBitmapImageRep 0x20049f480 Size={9, 9} ColorSpace=Generic RGB colorspace BPS=8 BPP=32 Pixels=9x9 Alpha=YES Planar=NO Format=0 CurrentBacking=<CGImageRef: 0x2004a9e80>"
Modification de l'ordre des actions dans la méthode ci-dessus et l'envoi reloadData à mon tableView, n'a eu aucun effet sur les résultats.
Il me semble que setIndicatorImage fonctionne comme prévu, mais en quelque sorte l'image ne soit pas affichée dans l'en-tête, ou du moins n'est pas visible.
Qu'est-ce que je suis absent ici?
EDIT
code est utilisé pour mettre une sous-classe de NSViewController dans la vue principale de la fenêtre de l'application par:
// adding view inside the main view
[mainView addSubview:view];
[view setFrame:[mainView bounds]];
[view display];
[mainView display];
La solution
OK, je viens de trouver un travail autour assez simple:
[[[tableView tableColumnWithIdentifier:[lastSortDescriptor key]] headerCell]
setStringValue:[columnName stringByAppendingString:([lastSortDescriptor ascending]) ? @" ▲" : @" ▼"]];