【问题标题】:NSOutlineView view based - Show button only when selected基于 NSOutlineView 视图 - 仅在选择时显示按钮
【发布时间】:2014-03-30 17:39:15
【问题描述】:

我有一个基于 NSOutlineView 视图的一列标题 + 图像/文本/按钮

我只想在选择项目时显示按钮。

我使用以下代码:

- (NSView *)outlineView:(NSOutlineView *)outlineView viewForTableColumn:(NSTableColumn *)tableColumn item:(id)item {
   ....
  SidebarTableCellView *sidebarTableCellView = [outlineView makeViewWithIdentifier:@"MainCell" owner:self];
  [sidebarTableCellView.buttonProgramme setHidden:YES];
  if (outlineView.selectedRow == [outlineView rowForItem:item])
            [sidebarTableCellView.buttonProgramme setHidden:NO];

但它不起作用,按钮总是隐藏的!我不知道是什么问题?

编辑:if 语句中的断点 => If 语句从不匹配

【问题讨论】:

    标签: objective-c cocoa nsoutlineview


    【解决方案1】:

    我设法通过添加以下代码解决了我的问题(viewForTableColumn 没有变化):

    - (void)outlineViewSelectionDidChange:(NSNotification *)notification {
    
        NSNotificationCenter * center = [NSNotificationCenter defaultCenter];
        [center removeObserver:self
                          name:@"NSOutlineViewSelectionDidChangeNotification"
                        object:self.sidebarOutlineView];
    
        NSInteger s = [self.sidebarOutlineView selectedRow];
        NSInteger lastSelectedRow = [[self.globalVariableDictionary objectForKey:@"lastSelectedRow"] integerValue];
        [self.globalVariableDictionary setObject:[NSNumber numberWithInteger:s] forKey:@"lastSelectedRow"];
    
        [self.sidebarOutlineView reloadDataForRowIndexes:[NSIndexSet indexSetWithIndex:s]
                                           columnIndexes:[NSIndexSet indexSetWithIndex:0]];
        [self.sidebarOutlineView reloadDataForRowIndexes:[NSIndexSet indexSetWithIndex:lastSelectedRow]
                                           columnIndexes:[NSIndexSet indexSetWithIndex:0]];
        [self.sidebarOutlineView selectRowIndexes:[NSIndexSet indexSetWithIndex:s] byExtendingSelection:NO];
    
        [center addObserver:self
                   selector:@selector(outlineViewSelectionDidChange:)
                       name:@"NSOutlineViewSelectionDidChangeNotification"
                     object:self.sidebarOutlineView];
    
        [center addObserver:self
                   selector:@selector(outlineViewSelectionDidChange:)
                       name:@"NSOutlineViewSelectionDidChangeNotification"
                     object:self.sidebarOutlineView];
    }
    

    通过这样做,我们强制调用 viewForTableColumn: 当用户更改选择时。

    谢谢!

    【讨论】:

      猜你喜欢
      • 2018-09-29
      • 2021-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多