Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 在NSOutlineView中隐藏组行的显示/隐藏按钮_Swift_Macos_Appkit_Nsoutlineview - Fatal编程技术网

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

Swift 在NSOutlineView中隐藏组行的显示/隐藏按钮,swift,macos,appkit,nsoutlineview,Swift,Macos,Appkit,Nsoutlineview,My NSOutlineView有一些无法折叠的组行,类似于Mail.app无法隐藏邮箱组。如果代理的shouldCollapseItem方法返回false,我希望Show/Hide hover按钮被禁用,但情况似乎并非如此 我已尝试使用以下委托手动禁用它: func outlineView(_ outlineView: NSOutlineView, willDisplayOutlineCell cell: Any, for tableColumn: NSTableColumn?, item:

My NSOutlineView有一些无法折叠的组行,类似于Mail.app无法隐藏邮箱组。如果代理的shouldCollapseItem方法返回false,我希望Show/Hide hover按钮被禁用,但情况似乎并非如此

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

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,并且在调用此委托时它没有superview,因此我无法查找同级视图

我可以访问Show/Hide按钮,它是makeViewwithIdentifier:owner:delegate中的一个未记录的NSOutlineButtonCell实例,但此时我不知道它是否表示可以隐藏的组之一

必须有办法做到这一点,因为Mail.app和其他应用程序能够有条件地禁用组的显示/隐藏按钮。

func outlineView(_ outlineView: NSOutlineView, shouldShowOutlineCellForItem item: Any) -> Bool
对于要隐藏的单元格,返回false

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

对于要隐藏的单元格,返回false

强烈建议不要调用包含did、will、HOLD甚至OutlineViewfor的委托方法。不要那样做。这些方法是框架专门调用的。非常好的建议。不管怎样,正如我所指出的,这是行不通的。这就是我最初的问题。强烈建议您不要调用包含did、will、HOLD甚至OutlineViewfor的委托方法。不要那样做。这些方法是框架专门调用的。非常好的建议。不管怎样,正如我所指出的,这是行不通的。这就是我最初的问题。这很有效!文件上说它只会影响披露三角,但我想显示/隐藏按钮相当于这个三角。这很有效!文件上说它只会影响披露三角形,但我想显示/隐藏按钮相当于三角形。