【问题标题】:Custom selected Icon for NSTableView Cell为 NSTableView 单元自定义选择的图标
【发布时间】:2013-12-10 03:46:27
【问题描述】:
我创建了一个带有自定义单元格的基于视图的 NSTableView。每个单元格中都有一个图像(来自网络)。在选择时显示自定义选择指示器(类似于复选标记)。
当任何单元格被点击时,它将在tableViewSelectionDidChange 委托中将该单元格的属性isClicked 修改为YES。完成后,我将调用重新加载表数据。重新加载时会检查是否选择了该单元格,如果选择,将显示选择指示符图像。
到目前为止,单元格图像来自本地,但现在我使用来自网络的单元格图像。这是使用dispatch async queue 加载的,因为表格被重新加载,所有这些图像都被再次下载,并且它在屏幕上有点闪烁。如何避免这种情况?
【问题讨论】:
标签:
macos
cocoa
nstableview
【解决方案1】:
我的解决方案代码丑陋,但有效:
- (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) {}
}