Macos NSTableView单元格的自定义选定图标

Macos NSTableView单元格的自定义选定图标,macos,cocoa,nstableview,Macos,Cocoa,Nstableview,我已使用自定义单元格创建了基于视图的NSTableView。每个单元格中都有一个图像(来自网络)。选择am时,显示自定义选择指示器(类似于复选标记) 单击任何单元格时,它将在tableViewSelectionDidChange委托中将该单元格名为isClicked的属性修改为YES。完成后,我将调用以重新加载表数据。重新加载时,将进行检查,以查看该单元格是否被选中,如果被选中,将显示选择指示器图像 直到现在,细胞图像是从本地,但现在我使用的细胞图像从网络。这是使用dispatch async

我已使用自定义单元格创建了基于视图的NSTableView。每个单元格中都有一个图像(来自网络)。选择am时,显示自定义选择指示器(类似于复选标记)

单击任何单元格时,它将在
tableViewSelectionDidChange
委托中将该单元格名为
isClicked
的属性修改为
YES
。完成后,我将调用以重新加载表数据。重新加载时,将进行检查,以查看该单元格是否被选中,如果被选中,将显示选择指示器图像


直到现在,细胞图像是从本地,但现在我使用的细胞图像从网络。这是使用
dispatch async queue
加载的,因为表被重新加载,所有这些图像都被再次下载,并且在屏幕上有点闪烁。如何避免这种情况?

我的解决方案代码难看,但效果良好:

- (void)tableViewSelectionDidChange:(NSNotification *)notification{    

    NSTableView *tableView = [notification object];

    NSInteger row = [tableView selectedRow];

    [self markSelectedCellForTable:tableView withRow:row];

    if ([_foldersList count]) {
        _currentFolder = [_foldersList objectAtIndex:row];

        [tableView scrollRowToVisible:row];
    }else{
        _currentFolder = nil;
    }

    NSLog(@"Folder %@",(_currentFolder)?[_currentFolder title]:@" not selected");
}

- (void)markSelectedCellForTable:(NSTableView *)tableView withRow:(NSInteger)row{

//ui
@try {
        NSTableRowView *rowView;
        NSTableCellView *cellView;
        for (int i=0; i<=[_foldersList count]; i++){

            rowView = [tableView rowViewAtRow:i
                              makeIfNecessary:NO];

            cellView = [[rowView subviews] objectAtIndex:0];

            [[cellView imageView] setHidden:(i!=row)];
        }

    }
    @catch (NSException *exception) {}
}
-(void)tableViewSelectionDidChange:(NSNotification*)通知{
NSTableView*tableView=[通知对象];
NSInteger行=[tableView selectedRow];
[自标记SelectedCellforTable:tableView with row:row];
如果([\u文件夹列表计数]){
_currentFolder=[\u foldersList对象索引:行];
[tableView scrollRowToVisible:行];
}否则{
_currentFolder=nil;
}
NSLog(@“文件夹%@”,(_currentFolder)?[_CurrentFolderTitle]:@“未选择”);
}
-(void)标记SelectedCellforTable:(NSTableView*)表格视图,带行:(NSInteger)行{
//用户界面
@试一试{
NSTableRowView*rowView;
NSTableCellView*cellView;
对于(int i=0;i