【问题标题】:Getting a column in an NSTableView with editable column order在具有可编辑列顺序的 NSTableView 中获取列
【发布时间】:2014-12-30 17:02:05
【问题描述】:

我有一个NSTableView,希望在用户点击“ClickMe”列时收到通知。我将整个表格视图链接到一个可以提取clickedColumn: 的方法,但我得到的是一个绝对数字,而不是对“ClickMe”列的引用(可能已被移动到另一个地方)。

我当然可以编写自己的搜索算法来查看列 X 是否实际上是“Clickme”列,但这不会很优雅。有没有办法正确识别列并以编程方式接收该 ID?

【问题讨论】:

    标签: macos cocoa cell nstableview nstablecolumn


    【解决方案1】:

    在你的表视图中查询 NSTableView 的 columnAtPoint: mouseDown: 或 mouseUp: 方法怎么样?

    【讨论】:

    • 不,我不想要索引,我想要 UID。因为第 6 列可能是也可能不是正确的,这取决于我的“ClickMe”列的位置。示例:如果您想访问具有某人姓氏的列,但用户将该列从表中的第一个位置移动到最后一个位置,索引 1 将不再获取我的姓氏,对吗?
    • 什么是tableviews鼠标上/下方法?
    【解决方案2】:

    我找到了一种以相当快的方式进行自己搜索的方法,但我仍然觉得我在这方面付出了太多努力:

    首先,在 Interface Builder 中将所需列的 Identifier 设置为“ClickMeColumn”。那么:

    NSInteger cmColumn = [tableView columnWithIdentifier:@"ClickMeColumn"];
    if ( [tableView clickedColumn] == cmColumn )
          NSLog(@"Clicked me!");
    

    我正在寻找类似[tableView clickedColumnIdentifier] 的东西。

    【讨论】:

      【解决方案3】:

      使用以下任何一种方法。由 tableView 的委托在选择时调用。您可以从相关的 tableColumn 中提取标识符和标题字符串。

      - (void)tableView:(NSTableView *)tableView didClickTableColumn:(NSTableColumn *)tableColumn {
      
      NSLog(@"tableView:didClickTableColumn: %@, titleString: %@", [tableColumn identifier], [[tableColumn headerCell] stringValue]);
      
      }
      
      
      - (void)tableView:(NSTableView *)tableView mouseDownInHeaderOfTableColumn:(NSTableColumn *)tableColumn {
      
      NSLog(@"tableView:mouseDownInHeaderOfTableColumn: %@, titleString: %@", [tableColumn identifier], [[tableColumn headerCell] stringValue]);
      
      }
      

      发件人:https://developer.apple.com/library/mac/documentation/Cocoa/Reference/ApplicationKit/Classes/NSTableView_Class

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多