複数のソート記述子を持つ列にインジケーター画像を設定する方法は?

cocoa nsarraycontroller nssortdescriptor nstablecolumn nstableview
複数のソート記述子を持つ列にインジケーター画像を設定する方法は?
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();

上記のコードは、三角形の並べ替え画像を設定しません。 複数の並べ替え記述子を設定していますが、単一の並べ替え記述子に変更した後、列ヘッダーに正しい画像が表示され始めます。 どちらの場合でも、currentImageは正しい画像が設定されていることを示します(降順でも同じです):

currentImage: "

上記のメソッドでアクションの順序を変更し、reloadDataをtableViewに送信しても、結果には影響しませんでした。

setIndicatorImageは期待どおりに動作するように思えますが、何らかの形で画像がヘッダーに表示されていないか、少なくとも表示されていません。

私はここで何が足りないのですか?

EDIT

NSViewControllerのサブクラスをアプリのウィンドウのメインビューに配置するには、コードを使用します。

// adding view inside the main view
[mainView addSubview:view];
[view setFrame:[mainView bounds]];

[view display];
[mainView display];

  0  3


ベストアンサー

OK、簡単な回避策を見つけました:

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

1


タイトルとURLをコピーしました