隐藏NSOutlineView中组行的显示/隐藏按钮

时间:2018-05-08 16:42:04

标签: swift macos appkit nsoutlineview

我的NSOutlineView有一些无法折叠的组行,类似于Mail.app无法隐藏“邮箱”组。如果委托的shouldCollapseItem方法返回false,我希望显示/隐藏悬停按钮被禁用,但似乎不是这种情况。

我尝试使用以下代理手动禁用它:

func outlineView(_ outlineView: NSOutlineView, willDisplayOutlineCell cell: Any, for tableColumn: NSTableColumn?, item: Any) {
    if outlineView.delegate?.outlineView?(outlineView, shouldCollapseItem: item) == false {
        if let view = outlineView.delegate?.outlineView?(outlineView, viewFor: tableColumn, item: item) {
            if let button = view.subviews.first(where: { $0.identifier == NSOutlineView.showHideButtonIdentifier }) {
                button.isHidden = true
            }
        }
    }
}

但这不起作用,因为返回的视图只是将要呈现的NSTableCellView,并且在调用此委托时它没有超级视图(所以我不能寻找兄弟姐妹的观点。)

我可以在NSOutlineButtonCell委托中访问“显示/隐藏”按钮(这是一个未记录的makeView(withIdentifier:owner:)实例),但此时我不知道它是否代表其中一个组可以隐藏或不隐藏。

必须有办法实现,因为Mail.app(和其他应用程序)能够有条件地禁用该组的显示/隐藏按钮。

1 个答案:

答案 0 :(得分:1)

实施

func outlineView(_ outlineView: NSOutlineView, shouldShowOutlineCellForItem item: Any) -> Bool

并为要隐藏的单元格返回false