如何以编程方式判断NSTableView是基于视图还是基于单元格?

时间:2014-04-13 14:04:12

标签: macos cocoa

应该是一个简单的问题,但界面中没有任何内容。 除了看到preparedCellAtColumn:row:之类的东西是否会引发异常外,还有什么可以做的吗?

preparedCellAtColumn:row:不会抛出异常外,它只会记录一条消息,并返回一个NSCell对象,因此您无法对其进行测试。

2 个答案:

答案 0 :(得分:0)

有趣的是,有几个人说没有必要知道提问者什么时候显然有这种需要。你可能想知道这个有很好的理由;例如如果实现泛型 NSTableView 子类或委托,则必须根据表视图是基于视图还是基于单元来区分其行为。

如果您使用 NSArrayController 和绑定,一种简单的方法是检查 NSTableColumn 绑定,因为基于单元格的 NSTableView 确实有这些以及基于视图的 NSTableView 都没有。所以这个代码片段将起作用:

        NSTableColumn *tableColumn = [[myTableView tableColumns] objectAtIndex:0];
        NSDictionary *binding = [tableColumn infoForBinding:@"value"];
        if (binding) {...}  // cell-based table view
        else {...}  // view-based table view

我没有尝试过,但如果您使用 NSTableViewDataSource ,则可能只是检查数据源是否响应- tableView:setObjectValue:forTableColumn:row:(基于单元格的表格视图)或不(基于视图的表格视图)。

答案 1 :(得分:-1)

没有必要告诉它,如果使用objectValueForTableColumn它将自动变为基于单元格,而另一方面如果使用viewForTableColumn则它将基于视图。您可以在这两种方法中传递任何类型的视图。