Swift 在NSOutlineView中隐藏组行的显示/隐藏按钮
My NSOutlineView有一些无法折叠的组行,类似于Mail.app无法隐藏邮箱组。如果代理的shouldCollapseItem方法返回false,我希望Show/Hide hover按钮被禁用,但情况似乎并非如此 我已尝试使用以下委托手动禁用它: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:
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的委托方法。不要那样做。这些方法是框架专门调用的。非常好的建议。不管怎样,正如我所指出的,这是行不通的。这就是我最初的问题。这很有效!文件上说它只会影响披露三角,但我想显示/隐藏按钮相当于这个三角。这很有效!文件上说它只会影响披露三角形,但我想显示/隐藏按钮相当于三角形。