在 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
用于要隐藏的单元格
我的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
用于要隐藏的单元格