在 NSOutlineView 中隐藏组行的 Show/Hide 按钮

Hide Show/Hide button for group rows in NSOutlineView

我的NSOutlineView有些组行无法折叠,类似于Mail.app无法隐藏"Mailboxes"组。如果代表的 shouldCollapseItem 方法 returns false,我希望 Show/Hide 悬停按钮被禁用,但情况似乎并非如此。

我已经尝试使用以下委托手动禁用它:

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: { [=11=].identifier == NSOutlineView.showHideButtonIdentifier }) {
                button.isHidden = true
            }
        }
    }
}

但这不起作用,因为返回的视图只是将要呈现的 NSTableCellView,并且在调用此委托时它没有父视图(所以我可以'寻找兄弟意见)。

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

必须有办法做到这一点,因为 Mail.app(和其他应用程序)能够有条件地禁用群组的 Show/Hide 按钮。

实施

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

和return false 用于要隐藏的单元格