В моем 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 (и другие приложения) могут условно отключить кнопку Показать / Скрыть группу.