我的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(和其他应用程序)能够有条件地禁用该组的显示/隐藏按钮。
答案 0 :(得分:1)
实施
func outlineView(_ outlineView: NSOutlineView, shouldShowOutlineCellForItem item: Any) -> Bool
并为要隐藏的单元格返回false