2010-01-10 67 views
2

我有一個3列的NSTableView。我可以通過單擊列標題來使用任何列排序。這是我的問題,雖然:我presorting數組,然後將其加載到NSTableView,所以最初的TableView已經按3列之一的值排序。現在,當我點擊列標題時,我可以採取措施,出現小的升序/降序圖像(三角形),指示排序順序如何。我想要的是,在第一次加載NSTableView時,能夠在列頭右側的列標題中顯示此ascendingimage三角形,對於已經對列進行排序的列。感謝提前:)NSTableView和在列標題問題中顯示排序圖像

Thanks Peter and cb160. So I added this in my refreshList method: 

的* lastColumn參數有,如果我使用的NSLog顯示它的正確識別,但仍是三角形的形象沒有得到當表加載數據第一次加載。有什麼我在這裏失蹤? 我的表視圖設置這樣的:

-(IBAction)refreshList:(id)sender 
{ 
//setup array here and sort the array based on one column. This column has 
    identifier 'col1' and it works as expected 

    // trying to set the sortindicator image for the column here 
    NSTableColumn *lastColumn; 

lastColumn = [aTableView tableColumnWithIdentifier:@"col1"]; 
[aTableView setIndicatorImage:[NSImage imageNamed:@"NSDescendingSortIndicator"]  
inTableColumn:lastColumn]; 
[aTable reloadData]; 
} 

- (int) numberOfRowsInTableView:(NSTableView *)aTable 
{ // return count of array 
} 

- (id)tableView:(NSTableView *)aTable objectValueForTableColumn: (NSTableColumn *)   
    tableColumn row:(int)row 
    { 
    //set up arrays here to load data in each column 


    } 
- (void)tableView:(NSTableView *)aTableView sortDescriptorsDidChange:(NSArray 
    *)oldDescriptors 
{ 
//sort here when column headers are clicked 
} 

回答

2

您可以使用NSTableView-setIndicatorImage:inTableColumn:方法來做到這一點。

您可以使用字符串NSAscendingSortIndicatorNSDescendingSortIndicator使用內置的圖像(與UIImage+imageNamed:方法。)

你可以使用-tableColumnWithIdentifier:方法上NSTableView這種方法NSTableColumn *參數。設置在使用在界面生成器的標識符屬性列中的idenitfier(見下文)

Xcode interface builder screenshot

+0

那的東西。我不知道如何選擇正確的列。 例如:\t [aTable setIndicatorImage:[NSImage imageNamed:@「NSAscendingSortIndicator」] inTableColumn:tableColumn]; 當我有多列時,我如何才能真正獲得正確的表列? – cocoacoder 2010-01-10 22:17:15

+0

在IB中爲它們提供標識符,然後向表格視圖請求具有該標識符的列。 – 2010-01-10 22:46:10

+0

試過了。例如: [aTable setIndicatorImage:[NSImage中imageNamed:@ 「NSAscendingSortIndicator」] inTableColumn:(NSTableColumn *)[aTable columnWithIdentifier:@ 「的col1」]]; 其中col1是該列的標識符。然後我做了一個 [tableview reloaddata]。 但是當第一次加載tableView的時候仍然不能得到那個三角形顯示。 – cocoacoder 2010-01-10 23:37:36