gpt4 book ai didi

macos - NSTableView 单元格的自定义选定图标

转载 作者:行者123 更新时间:2023-12-03 17:22:11 25 4
gpt4 key购买 nike

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

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

到目前为止,细胞图像来自本地,但现在使用来自网络的细胞图像。这是使用调度异步队列加载的,因为表被重新加载,所以所有这些图像都会被再次下载,并且它会在屏幕上闪烁。如何避免这种情况?

最佳答案

我的解决方案代码丑陋,但有效:

- (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) {}
}

关于macos - NSTableView 单元格的自定义选定图标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20485657/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com