2010-01-10 117 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