首页 > 解决方案 > 隐藏 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(和其他应用程序)能够有条件地禁用组的显示/隐藏按钮。

标签: swiftmacosappkitnsoutlineview

解决方案


实施

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

并返回false要隐藏的单元格


推荐阅读