2014-11-14 6 views
0

В моем приложении есть табличное представление. Он имеет 2 колонки, один «ключ» и один «значение», код для Tableview, как показано ниже:Как сортировать по столбцу tableview в какао

- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView 
{ 
    //DataEntity *dataEntity = [[DataEntity alloc]init]; 
    return [dataEntity.items count]; 
} 

- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row 
{ 
    //DataEntity *dataEntity = [[DataEntity alloc]init]; 
    if([[tableColumn identifier]isEqualToString:@"key"]) 
    { 
     return [[dataEntity.items allKeys] objectAtIndex:row]; 
    } 
    if([[tableColumn identifier] isEqualToString:@"value"]) 
    { 
     return [[dataEntity.items allValues] objectAtIndex:row]; 
    } 
    return nil; 
} 

dataEntity является signle экземпляр источника данных и элементов является изменяемым dictianary. Теперь я хочу сортировать по одному столбцу после того, как я нажму заголовок этого столбца. Как его реализовать? Я пытаюсь сделать это, как показано ниже, но это не сработает.

-(void)tableView:(NSTableView *)tableView mouseDownInHeaderOfTableColumn:(NSTableColumn *)tableColumn 
{ 
    NSImage *indicatorImage; 
    if(sortAscending) 
    { 
    indicatorImage = [NSImage imageNamed:@"NSAscendingSortIndicator"]; 
    NSMutableDictionary *tempDict = [[NSMutableDictionary alloc]init]; 
    [tempDict setDictionary:dataEntity.items]; 
     NSLog(@"before sort %@",tempDict); 
    NSArray *keys = [tempDict allKeys]; 
    NSArray *sortedArray = [keys sortedArrayUsingComparator:^NSComparisonResult(id obj1,id obj2){ 
     return ([obj1 compare:obj2 options:NSNumericSearch]); 
    }]; 

    [dataEntity.items setDictionary:tempDict]; 

    } 
    else 
    { 
    indicatorImage = [NSImage imageNamed:@"NSDescendingSortIndicator"]; 
    } 
    sortAscending=!sortAscending; 
    [tableView setIndicatorImage:indicatorImage inTableColumn:tableColumn]; 
    [tableView reloadData]; 
} 

ответ

0

Самый простой способ добиться этого через IB, просто выберите столбцы таблицы атрибутов и инспектора, а затем установить «своего рода ключ» к свойству, которое представляет значение в словаре.

enter image description here

Смежные вопросы