【问题标题】: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) {}
    }
    

    【讨论】:

      猜你喜欢
      • 2017-11-13
      • 2010-10-28
      • 1970-01-01
      • 2012-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-22
      • 2011-12-18
      相关资源
      最近更新 更多