0
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(); 

Le code ci-dessus ne définit pas une image de tri en triangle. Je mets plusieurs descripteurs de tri, mais après l'avoir changé en un seul, il commence à afficher l'image correcte dans l'en-tête de la colonne. Dans les deux cas, currentImage me montre que l'image correcte est définie (même pour l'ordre décroissant):Comment définir une image d'indicateur sur une colonne avec plusieurs descripteurs de tri?

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 n'est pas affichée dans l'en-tête, ou du moins n'est pas visible.

Qu'est-ce qui me manque 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]; 
+0

Où est ce code dans votre application? –

+0

C'est dans une sous-classe de NSViewController qui est affichée comme vue principale dans la fenêtre de l'application (voir aussi EDIT en question). –

Répondre

1

OK, je viens de trouver un travail autour assez simple:

 [[[tableView tableColumnWithIdentifier:[lastSortDescriptor key]] headerCell] setStringValue:[columnName stringByAppendingString:([lastSortDescriptor ascending]) ? @" ▲" : @" ▼"]]; 
Questions connexes