我已经使用自定义单元格创建了一个基于NSTableView的视图。每个单元格中都有一个图像(来自网络)。选择显示自定义选择指示符(类似于复选标记)。
当点击任何单元格时,它会将isClicked
中名为YES
的单元格属性修改为tableViewSelectionDidChange
委托中的dispatch async queue
。完成后,我将调用重新加载表数据。在重新加载检查时,查看是否选择了该单元格,如果选中,则将显示选择指示符图像。
到目前为止,细胞图像来自本地,但现在正在使用来自网络的细胞图像。这是使用{{1}}加载的。因为表重新加载所有这些图像再次被下载,并且它在屏幕上闪烁。如何避免这种情况?
答案 0 :(得分:0)
我的解决方案带有丑陋的代码,但有效:
- (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) {}
}