Кнопка «Скрыть / Скрыть» для строк группы в NSOutlineView - PullRequest
0 голосов
/ 08 мая 2018

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

1 Ответ

0 голосов
/ 08 мая 2018

Реализовать

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

и возврат false для скрытых ячеек

...